# Generated by Django 6.1.1 on 2026-10-13 12:11

import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models


class Migration(migrations.Migration):

    initial = True

    dependencies = [
        ('modules', '0001_initial'),
        ('organizations', '0001_initial'),
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
    ]

    operations = [
        migrations.CreateModel(
            name='Permission',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('code', models.CharField(max_length=100, unique=True)),
                ('action', models.CharField(max_length=40)),
                ('name_fa', models.CharField(max_length=160)),
                ('is_platform_only', models.BooleanField(default=False)),
                ('module', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='permissions', to='modules.module')),
            ],
            options={
                'db_table': 'permissions',
                'ordering': ['code'],
            },
        ),
        migrations.CreateModel(
            name='Role',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('code', models.SlugField()),
                ('name', models.CharField(max_length=120)),
                ('is_system', models.BooleanField(default=False)),
                ('is_active', models.BooleanField(default=True)),
                ('created_at', models.DateTimeField(auto_now_add=True)),
                ('organization', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='roles', to='organizations.organization')),
            ],
            options={
                'db_table': 'roles',
                'ordering': ['id'],
            },
        ),
        migrations.CreateModel(
            name='MembershipRole',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('membership', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='membership_roles', to='organizations.organizationmembership')),
                ('role', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='membership_roles', to='access.role')),
            ],
            options={
                'db_table': 'membership_roles',
            },
        ),
        migrations.CreateModel(
            name='RolePermission',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('scope', models.CharField(choices=[('self', 'Self'), ('team', 'Team'), ('unit', 'Unit'), ('organization', 'Organization'), ('assigned_organizations', 'Assigned organizations'), ('all', 'All')], default='self', max_length=30)),
                ('can_delegate', models.BooleanField(default=False)),
                ('permission', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='role_grants', to='access.permission')),
                ('role', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='grants', to='access.role')),
            ],
            options={
                'db_table': 'role_permissions',
            },
        ),
        migrations.CreateModel(
            name='UserPermissionOverride',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('effect', models.CharField(choices=[('allow', 'Allow'), ('deny', 'Deny')], max_length=5)),
                ('scope', models.CharField(choices=[('self', 'Self'), ('team', 'Team'), ('unit', 'Unit'), ('organization', 'Organization'), ('assigned_organizations', 'Assigned organizations'), ('all', 'All')], default='self', max_length=30)),
                ('can_delegate', models.BooleanField(default=False)),
                ('reason', models.CharField(blank=True, default='', max_length=255)),
                ('expires_at', models.DateTimeField(blank=True, null=True)),
                ('created_at', models.DateTimeField(auto_now_add=True)),
                ('created_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL)),
                ('membership', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='overrides', to='organizations.organizationmembership')),
                ('permission', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='overrides', to='access.permission')),
            ],
            options={
                'db_table': 'user_permission_overrides',
            },
        ),
        migrations.AddConstraint(
            model_name='role',
            constraint=models.UniqueConstraint(fields=('organization', 'code'), name='unique_role_code_per_org'),
        ),
        migrations.AddConstraint(
            model_name='membershiprole',
            constraint=models.UniqueConstraint(fields=('membership', 'role'), name='unique_membership_role'),
        ),
        migrations.AddConstraint(
            model_name='rolepermission',
            constraint=models.UniqueConstraint(fields=('role', 'permission'), name='unique_role_permission'),
        ),
        migrations.AddConstraint(
            model_name='userpermissionoverride',
            constraint=models.UniqueConstraint(fields=('membership', 'permission'), name='unique_override_per_permission'),
        ),
    ]
