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


class Migration(migrations.Migration):

    initial = True

    dependencies = []

    operations = [
        migrations.CreateModel(
            name='SchoolPermission',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('codename', models.CharField(max_length=100, unique=True)),
                ('name', models.CharField(max_length=255)),
                ('category', models.CharField(
                    choices=[
                        ('students', 'Students'),
                        ('parents', 'Parents'),
                        ('teachers', 'Teachers'),
                        ('enrollments', 'Enrollments'),
                        ('academics', 'Academics'),
                        ('fee', 'Fee Management'),
                        ('announcements', 'Announcements'),
                        ('attendance', 'Attendance'),
                        ('timetable', 'Timetable'),
                        ('tasks', 'Tasks'),
                        ('exams', 'Exams'),
                        ('transport', 'Transport'),
                        ('payslips', 'Payslips'),
                        ('reports', 'Reports'),
                    ],
                    max_length=50,
                )),
                ('description', models.TextField(blank=True)),
            ],
            options={
                'ordering': ['category', 'codename'],
            },
        ),
        migrations.CreateModel(
            name='SchoolRole',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('name', models.CharField(max_length=150, unique=True)),
                ('description', models.TextField(blank=True)),
                ('is_active', models.BooleanField(default=True)),
                ('created_at', models.DateTimeField(auto_now_add=True)),
                ('updated_at', models.DateTimeField(auto_now=True)),
            ],
            options={
                'ordering': ['name'],
            },
        ),
        migrations.CreateModel(
            name='SchoolRolePermission',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('granted_at', models.DateTimeField(auto_now_add=True)),
                ('role', models.ForeignKey(
                    on_delete=django.db.models.deletion.CASCADE,
                    related_name='role_permissions',
                    to='school_admin.schoolrole',
                )),
                ('permission', models.ForeignKey(
                    on_delete=django.db.models.deletion.CASCADE,
                    to='school_admin.schoolpermission',
                )),
            ],
            options={
                'unique_together': {('role', 'permission')},
            },
        ),
        migrations.AddField(
            model_name='schoolrole',
            name='permissions',
            field=models.ManyToManyField(
                blank=True,
                related_name='roles',
                through='school_admin.SchoolRolePermission',
                to='school_admin.SchoolPermission',
            ),
        ),
        migrations.CreateModel(
            name='UserSchoolRole',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('user_id', models.IntegerField(db_index=True, help_text='User ID from master database')),
                ('assigned_at', models.DateTimeField(auto_now_add=True)),
                ('assigned_by_id', models.IntegerField(blank=True, null=True, help_text='User ID of the assigner (master DB)')),
                ('role', models.ForeignKey(
                    on_delete=django.db.models.deletion.CASCADE,
                    related_name='user_assignments',
                    to='school_admin.schoolrole',
                )),
            ],
            options={
                'ordering': ['user_id'],
                'unique_together': {('user_id', 'role')},
            },
        ),
    ]
