from django.core.management.base import BaseCommand
from django.core.mail import EmailMessage
from django.utils import timezone
from datetime import timedelta
from users.models import Client, EmailSetup
import logging
import os

# Optional: log file for debugging
log_file = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'birthday_report.log')
logging.basicConfig(filename=log_file, level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')


class Command(BaseCommand):
    help = "Send email to admin with next week’s birthday clients"

    def handle(self, *args, **kwargs):
        try:
            today = timezone.localdate()

            # Next Monday
            monday = today + timedelta(days=(7 - today.weekday()))
            # Next Sunday
            sunday = monday + timedelta(days=6)

            # Fetch clients with birthdays in that range
            clients = Client.objects.filter(
                client_status=1,
                dob__gte=monday,
                dob__lte=sunday,
            )

            if not clients.exists():
                logging.info("No birthdays found for next week.")
                return

            report_duration = f"Upcoming Birthdays (From {monday.strftime('%d-%m-%Y')} to {sunday.strftime('%d-%m-%Y')})"

            # Build email content as HTML table
            email_content = f"<h2>MyValueTrip</h2><p>{report_duration}</p>"
            email_content += "<table border='1' cellpadding='5' cellspacing='0'>"
            email_content += "<tr><th>Sr. No.</th><th>Client Name</th><th>Date of Birth</th></tr>"

            for idx, client in enumerate(clients, start=1):
                client_name = f"{client.client_salutation or ''} {client.client_first_name or ''} {client.client_middle_name or ''} {client.client_last_name or ''}".strip()
                dob_formatted = client.dob.strftime('%d-%m-%Y')
                email_content += f"<tr><td>{idx}</td><td>{client_name}</td><td>{dob_formatted}</td></tr>"

            email_content += "</table>"

            # Fetch recipients from EmailSetup model
            recipients = EmailSetup.objects.filter(
                report_type="Birthday Report"
            ).values_list("email", flat=True)

            if not recipients:
                logging.warning("No recipient configured for Birthday Report.")
                return

            # Send email
            email = EmailMessage(
                subject="Upcoming Birthdays Report",
                body=email_content,
                to=list(recipients),
            )
            email.content_subtype = "html"
            email.send()

            logging.info(f"Birthday report sent to: {', '.join(recipients)}")

        except Exception as e:
            logging.error(f"Failed to send birthday report email: {e}")
