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 ClientPassport, EmailSetup
import logging
import os

# Log file for debugging (optional)
log_file = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'passport_report.log')
logging.basicConfig(filename=log_file, level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')


class Command(BaseCommand):
    help = "Send passport expiry report emails for next week"

    def handle(self, *args, **kwargs):
        try:
            today = timezone.localdate()

            # Current Saturday
            saturday = today + timedelta((5 - today.weekday()) % 7)  # Saturday = 5

            # Next Monday
            monday = saturday + timedelta(days=(7 - saturday.weekday()))  # Monday = 0

            # Next Sunday
            sunday = monday + timedelta(days=6)

            # Fetch passports expiring next week
            passports = ClientPassport.objects.filter(
                ref_client__client_status=1,
                passport_expiry_date__gte=monday,
                passport_expiry_date__lte=sunday,
            ).select_related("ref_client")

            report_duration = f"Upcoming Passport Expiry (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>Passport No</th><th>Expiry Date</th></tr>"

            for idx, p in enumerate(passports, start=1):
                client = p.ref_client
                client_name = f"{client.client_salutation or ''} {client.client_first_name or ''} {client.client_middle_name or ''} {client.client_last_name or ''}".strip()
                expiry_formatted = p.passport_expiry_date.strftime("%d-%m-%Y")
                email_content += f"<tr><td>{idx}</td><td>{client_name}</td><td>{p.passport_no}</td><td>{expiry_formatted}</td></tr>"

            email_content += "</table>"

            # Fetch recipients from EmailSetup model
            recipients = EmailSetup.objects.filter(
                report_type="Passport Expiry"
            ).values_list("email", flat=True)

            if not recipients:
                logging.warning("No recipient configured for Passport Expiry.")
                return

            # Send email
            email = EmailMessage(
                subject="Upcoming Passport Expiry Report",
                body=email_content,
                to=list(recipients),
            )
            email.content_subtype = "html"
            email.send()

            logging.info(f"Passport expiry report sent to: {', '.join(recipients)}")

        except Exception as e:
            logging.error(f"Failed to send passport expiry email: {e}")
