
import re
import requests
from django.core.management.base import BaseCommand
from django.utils import timezone
from django.conf import settings
from crm.models import BatchLead, EmailLog


class Command(BaseCommand):
    help = 'Check Mailgun inbox for replies and mark replied leads'

    def handle(self, *args, **kwargs):
        api_key = settings.ANYMAIL['MAILGUN_API_KEY']
        domain = settings.ANYMAIL['MAILGUN_SENDER_DOMAIN']

        response = requests.get(
            f"https://api.mailgun.net/v3/{domain}/events",
            auth=("api", api_key),
            params={"event": "stored", "limit": 100},
        )

        if response.status_code != 200:
            self.stdout.write(self.style.ERROR(f"Mailgun API error: {response.text}"))
            return

        events = response.json().get('items', [])
        self.stdout.write(f"Total events found: {len(events)}")

        for event in events:
            from_header = event.get('message', {}).get('headers', {}).get('from', '')
            match = re.search(r'[\w\.-]+@[\w\.-]+', from_header)
            if not match:
                continue
            sender_email = match.group(0).lower()

            batch_lead = BatchLead.objects.filter(
                email__iexact=sender_email,
                replied=False
            ).first()

            if batch_lead:
                batch_lead.replied = True
                batch_lead.replied_at = timezone.now()
                batch_lead.save(update_fields=['replied', 'replied_at'])

                EmailLog.objects.filter(
                    batch_lead=batch_lead
                ).order_by('-sent_at').update(status=EmailLog.Status.REPLIED)

                self.stdout.write(self.style.SUCCESS(f"Reply detected from {sender_email}"))
            else:
                self.stdout.write(f"No matching BatchLead for: {sender_email}")
