# Generated migration for separate study proof and payment deadlines

from django.db import migrations, models
from datetime import date


def calculate_study_proof_deadline(jahr, quartal):
    """Calculate semester-based study proof deadline"""
    # Q1, Q2 → March 15 (same year)
    # Q3, Q4 → September 15 (same year)
    if quartal in [1, 2]:
        return date(jahr, 3, 15)
    else:  # Q3, Q4
        return date(jahr, 9, 15)


def calculate_payment_due_date(jahr, quartal):
    """Calculate quarterly payment due date (paid in advance)"""
    # Q1 → December 15 (previous year)
    # Q2 → March 15 (same year)
    # Q3 → June 15 (same year)
    # Q4 → September 15 (same year)
    if quartal == 1:
        return date(jahr - 1, 12, 15)
    elif quartal == 2:
        return date(jahr, 3, 15)
    elif quartal == 3:
        return date(jahr, 6, 15)
    else:  # Q4
        return date(jahr, 9, 15)


def populate_deadlines(apps, schema_editor):
    """Populate new deadline fields for existing records"""
    VierteljahresNachweis = apps.get_model('stiftung', 'VierteljahresNachweis')
    
    for nachweis in VierteljahresNachweis.objects.all():
        # Calculate and set study proof deadline
        if not nachweis.studiennachweis_faelligkeitsdatum:
            nachweis.studiennachweis_faelligkeitsdatum = calculate_study_proof_deadline(
                nachweis.jahr, nachweis.quartal
            )
        
        # Calculate and set payment due date
        if not nachweis.zahlung_faelligkeitsdatum:
            nachweis.zahlung_faelligkeitsdatum = calculate_payment_due_date(
                nachweis.jahr, nachweis.quartal
            )
        
        nachweis.save(update_fields=['studiennachweis_faelligkeitsdatum', 'zahlung_faelligkeitsdatum'])


class Migration(migrations.Migration):

    dependencies = [
        ('stiftung', '0041_alter_geschichteseite_inhalt'),
    ]

    operations = [
        # Add new fields
        migrations.AddField(
            model_name='vierteljahresnachweis',
            name='studiennachweis_faelligkeitsdatum',
            field=models.DateField(
                blank=True,
                help_text='Semesterbasierte Frist: Q1/Q2 → 15. März, Q3/Q4 → 15. September',
                null=True,
                verbose_name='Studiennachweis Fälligkeitsdatum'
            ),
        ),
        migrations.AddField(
            model_name='vierteljahresnachweis',
            name='zahlung_faelligkeitsdatum',
            field=models.DateField(
                blank=True,
                help_text='Vierteljährliche Zahlungsfälligkeit im Voraus: Q1→15. Dez (Vorjahr), Q2→15. Mär, Q3→15. Jun, Q4→15. Sep',
                null=True,
                verbose_name='Zahlungsfälligkeit'
            ),
        ),
        # Populate existing records
        migrations.RunPython(populate_deadlines, migrations.RunPython.noop),
    ]

