from django_cron import CronJobBase, Schedule
from django.core.mail import send_mail
from django.contrib.auth.models import User
from contacts.models import ContactPerson
from crm.models import Interaction
from django.utils import timezone
from datetime import timedelta
from django.conf import settings
from django.urls import reverse

class ReminderCronJob(CronJobBase):
    RUN_EVERY_MINS = 5  # запуск раз на 5 хвилин

    schedule = Schedule(run_every_mins=RUN_EVERY_MINS)
    code = 'crm.reminder_cron_job'  # унікальний ідентифікатор задачі

    def do(self):
        now = timezone.now()
        two_hours_from_now = now + timedelta(hours=2)

        # Перевірка дати народження (birth_date)
        today = timezone.localdate()
        contact_birthday_today = ContactPerson.objects.filter(birth_date=today)
        for contact in contact_birthday_today:
            # Генеруємо URL до сторінки детальної інформації про контакт
            contact_url = reverse('contact_person_detail', args=[contact.id])
            full_contact_url = f'https://{settings.SITE_DOMAIN}{contact_url}'

            # Надсилаємо імейл всім користувачам
            for user in User.objects.all():
                send_mail(
                    'Нагадування про День народження',
                    f'Контакт {contact.name} має День народження сьогодні.\n'
                    f'Переглянути контакт: {full_contact_url}',
                    'sender@rawagro.com.ua',
                    [user.email],
                    fail_silently=False,
                )

        # Перевірка дати та часу наступної взаємодії за 2 години до події
        interactions_upcoming = Interaction.objects.filter(
            next_interaction_date__gte=now,
            next_interaction_date__lte=two_hours_from_now
        )
        for interaction in interactions_upcoming:
            # Генеруємо URL до сторінки створення взаємодії
            interaction_url = reverse('create_interaction', args=[interaction.farmer.id])
            full_interaction_url = f'https://{settings.SITE_DOMAIN}{interaction_url}'

            # Формуємо список користувачів для сповіщення
            users_to_notify = []

            if interaction.user and interaction.user.email:
                users_to_notify.append(interaction.user)

            if interaction.assigned_to and interaction.assigned_to.email and interaction.assigned_to != interaction.user:
                users_to_notify.append(interaction.assigned_to)

            # Надсилаємо імейл кожному користувачу
            for user in users_to_notify:
                send_mail(
                    'Нагадування про наступну взаємодію',
                    f'Шановний(а) {user.get_full_name()},\n\n'
                    f'Нагадуємо, що у вас запланована взаємодія з фермером {interaction.farmer.name} через 2 години.\n'
                    f'Створити взаємодію: {full_interaction_url}',
                    'sender@rawagro.com.ua',
                    [user.email],
                    fail_silently=False,
                )
