# Generated by Django 4.2.9 on 2026-02-27 12:36

from django.db import migrations, models
import django.db.models.deletion


WEEKDAY_CODES = ["MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"]


def backfill_attendance_session_lesson(apps, schema_editor):
    AttendanceSession = apps.get_model("app", "AttendanceSession")
    Timetable = apps.get_model("app", "Timetable")
    db_alias = schema_editor.connection.alias

    sessions = (
        AttendanceSession.objects.using(db_alias)
        .filter(lesson__isnull=True)
        .exclude(time_slot_id__isnull=True)
    )
    for session in sessions.iterator(chunk_size=500):
        try:
            weekday = WEEKDAY_CODES[session.date.weekday()]
        except Exception:
            continue

        lesson_qs = Timetable.objects.using(db_alias).filter(
            class_stream_id=session.class_stream_id,
            subject_id=session.subject_id,
            time_slot_id=session.time_slot_id,
            weekday=weekday,
        )

        lesson = None
        if session.teacher_id:
            lesson = lesson_qs.filter(teacher_id=session.teacher_id).first()
        if lesson is None:
            lesson = lesson_qs.first()
        if lesson is None:
            continue

        AttendanceSession.objects.using(db_alias).filter(pk=session.pk).update(lesson_id=lesson.pk)


def noop_reverse(apps, schema_editor):
    return


class Migration(migrations.Migration):

    dependencies = [
        ('app', '0074_attendanceauditlog_attendancepolicy_and_more'),
    ]

    operations = [
        migrations.AddField(
            model_name='attendancesession',
            name='lesson',
            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='attendance_sessions', to='app.timetable'),
        ),
        migrations.RunPython(backfill_attendance_session_lesson, reverse_code=noop_reverse),
    ]
