"""
Gestion en ligne de commande des mails de rappel K-Fet.
"""

from datetime import timedelta

from django.core.management.base import BaseCommand
from django.utils import timezone

from kfet.models import AccountNegative


class Command(BaseCommand):
    help = (
        "Envoie un mail de rappel aux personnes en négatif.\n"
        "Envoie un mail au bout de 24h, puis un mail par semaine."
    )
    leave_locale_alone = True

    def handle(self, *args, **options):
        now = timezone.now()
        first_delay = timedelta(days=1)
        periodic_delay = timedelta(weeks=1)
        accounts_first_mail = (
            AccountNegative.objects.filter(start__lt=now - first_delay)
            .filter(last_rappel__isnull=True)
            .all()
        )
        accounts_periodic_mail = (
            AccountNegative.objects.filter(last_rappel__isnull=False)
            .filter(last_rappel__lt=now - periodic_delay)
            .all()
        )
        for neg in accounts_first_mail:
            neg.send_rappel()
            self.stdout.write(f"Mail de rappel pour {neg.account} envoyé avec succès.")
        for neg in accounts_periodic_mail:
            neg.send_rappel()
            self.stdout.write("Mail de rappel pour {neg.account} envoyé avec succès.")
        if (not accounts_first_mail) and (not accounts_periodic_mail):
            self.stdout.write("Aucun mail à envoyer.")
