# Generated by Django 4.2.9 on 2026-02-12 13:12

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


class CreateModelIfMissing(migrations.CreateModel):
    """Create a model table only when it does not already exist."""

    def database_forwards(self, app_label, schema_editor, from_state, to_state):
        model = to_state.apps.get_model(app_label, self.name)
        table_name = model._meta.db_table

        with schema_editor.connection.cursor() as cursor:
            if table_name in schema_editor.connection.introspection.table_names(cursor):
                return

        return super().database_forwards(app_label, schema_editor, from_state, to_state)


class Migration(migrations.Migration):

    dependencies = [
        ('app', '0061_alter_timeslot_options_and_more'),
    ]

    operations = [
        CreateModelIfMissing(
            name='AttendanceSession',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('date', models.DateField(default=django.utils.timezone.now)),
                ('is_locked', models.BooleanField(default=False)),
                ('created_at', models.DateTimeField(auto_now_add=True)),
                ('updated_at', models.DateTimeField(auto_now=True)),
                ('academic_year', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='app.academicyear')),
                ('class_stream', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='attendance_sessions', to='app.academicclassstream')),
                ('subject', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='attendance_sessions', to='app.subject')),
                ('teacher', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='attendance_sessions', to='app.staff')),
                ('term', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='app.term')),
                ('time_slot', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='app.timeslot')),
            ],
            options={
                'ordering': ('-date', 'class_stream'),
                'unique_together': {('class_stream', 'subject', 'date', 'time_slot')},
            },
        ),
        CreateModelIfMissing(
            name='AttendanceRecord',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('status', models.CharField(choices=[('present', 'Present'), ('late', 'Late'), ('absent', 'Absent'), ('excused', 'Excused')], default='present', max_length=20)),
                ('remarks', models.CharField(blank=True, max_length=255)),
                ('captured_at', models.DateTimeField(auto_now=True)),
                ('captured_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='app.staff')),
                ('session', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='records', to='app.attendancesession')),
                ('student', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='attendance_records', to='app.student')),
            ],
            options={
                'ordering': ('student',),
                'unique_together': {('session', 'student')},
            },
        ),
    ]
