from django.db import migrations
from django.utils import timezone


def backfill_sent_to_department(apps, schema_editor):
    Complaint = apps.get_model("complaints", "Complaint")
    Inquiry = apps.get_model("complaints", "Inquiry")
    CID = apps.get_model("complaints", "ComplaintInvolvedDepartment")

    Complaint.objects.filter(department__isnull=False).update(sent_to_department=True)
    Complaint.objects.filter(
        sent_to_department=True,
        sent_to_department_at__isnull=True,
        forwarded_to_dept_at__isnull=False,
    ).update(sent_to_department_at=models.F("forwarded_to_dept_at"))
    Complaint.objects.filter(
        sent_to_department=True, sent_to_department_at__isnull=True
    ).update(sent_to_department_at=timezone.now())

    Inquiry.objects.filter(department__isnull=False).update(sent_to_department=True)
    Inquiry.objects.filter(
        sent_to_department=True,
        sent_to_department_at__isnull=True,
        transferred_at__isnull=False,
    ).update(sent_to_department_at=models.F("transferred_at"))
    Inquiry.objects.filter(
        sent_to_department=True, sent_to_department_at__isnull=True
    ).update(sent_to_department_at=timezone.now())

    CID.objects.filter(forwarded_at__isnull=False).update(sent=True)
    CID.objects.filter(sent=True, sent_at__isnull=True).update(
        sent_at=models.F("forwarded_at")
    )
    CID.objects.filter(sent=True, sent_at__isnull=True).update(
        sent_at=timezone.now()
    )


def reverse_backfill(apps, schema_editor):
    Complaint = apps.get_model("complaints", "Complaint")
    Inquiry = apps.get_model("complaints", "Inquiry")
    CID = apps.get_model("complaints", "ComplaintInvolvedDepartment")

    Complaint.objects.all().update(
        sent_to_department=False, sent_to_department_at=None
    )
    Inquiry.objects.all().update(
        sent_to_department=False, sent_to_department_at=None
    )
    CID.objects.all().update(sent=False, sent_at=None)


from django.db import models

class Migration(migrations.Migration):

    dependencies = [
        ("complaints", "0005_add_sent_to_department_fields"),
    ]

    operations = [
        migrations.RunPython(backfill_sent_to_department, reverse_backfill),
    ]
