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


class Migration(migrations.Migration):
    dependencies = [
        ("companies", "0003_position"),
        ("core", "0005_access_scope_model"),
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
    ]
    operations = [
        migrations.AddField(
            model_name="user", name="account_status",
            field=models.CharField(
                choices=[("pending_activation", "Pending activation"), ("active", "Active"), ("suspended", "Suspended"), ("locked", "Locked")],
                db_index=True, default="active", max_length=24,
            ),
        ),
        migrations.AddField(
            model_name="appconfig", name="hr_department",
            field=models.ForeignKey(blank=True, help_text="Existing department whose managers hold HR authority.", null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="+", to="companies.department"),
        ),
        migrations.AddField(model_name="departmentmembership", name="is_active", field=models.BooleanField(db_index=True, default=True)),
        migrations.AddField(model_name="departmentmembership", name="expires_at", field=models.DateTimeField(blank=True, db_index=True, null=True)),
        migrations.AddField(model_name="departmentmembership", name="suspended_at", field=models.DateTimeField(blank=True, null=True)),
        migrations.CreateModel(
            name="AccessChangeRequest",
            fields=[
                ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
                ("proposed_changes", models.JSONField(default=dict)),
                ("reason", models.TextField(blank=True)),
                ("status", models.CharField(choices=[("pending", "Pending"), ("approved", "Approved"), ("rejected", "Rejected")], db_index=True, default="pending", max_length=20)),
                ("requested_at", models.DateTimeField(auto_now_add=True)),
                ("reviewed_at", models.DateTimeField(blank=True, null=True)),
                ("new_department", models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name="incoming_access_requests", to="companies.department")),
                ("old_department", models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="outgoing_access_requests", to="companies.department")),
                ("requested_by", models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name="requested_access_changes", to=settings.AUTH_USER_MODEL)),
                ("reviewed_by", models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="reviewed_access_changes", to=settings.AUTH_USER_MODEL)),
                ("target_user", models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name="access_change_requests", to=settings.AUTH_USER_MODEL)),
            ],
            options={"db_table": "rbac_access_change_requests", "ordering": ["-requested_at"]},
        ),
    ]
