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__)), 'anniversary_report.log')
logging.basicConfig(filename=log_file, level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')


class Command(BaseCommand):
    help = "Send anniversary report to configured emails"

    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 active clients with anniversary next week
            clients = Client.objects.filter(
                client_status=1,
                anniversary_date__gte=monday,
                anniversary_date__lte=sunday,
            )

            if not clients.exists():
                logging.info("No anniversaries found for next week.")
                return

            report_duration = f"Upcoming Anniversary (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>Anniversary Date</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()
                anniversary_formatted = client.anniversary_date.strftime('%d-%m-%Y')
                email_content += f"<tr><td>{idx}</td><td>{client_name}</td><td>{anniversary_formatted}</td></tr>"

            email_content += "</table>"

            # Fetch recipients from EmailSetup model
            recipients = EmailSetup.objects.filter(
                report_type="Anniversary Report"
            ).values_list("email", flat=True)

            if not recipients:
                logging.warning("No recipient configured for Anniversary Report.")
                return

            # Send email
            email = EmailMessage(
                subject="Upcoming Anniversary Report",
                body=email_content,
                to=list(recipients),
            )
            email.content_subtype = "html"
            email.send()

            logging.info(f"Anniversary report sent to: {', '.join(recipients)}")

        except Exception as e:
            logging.error(f"Failed to send anniversary report email: {e}")
