# Generated by Django 5.2.6 on 2026-06-10 17:55

import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models


class Migration(migrations.Migration):

    dependencies = [
        ("organizations", "0002_workspace_template_user_context_pref"),
        ("platform_modules", "0011_phase2_featureoverride_decouple_module_fk"),
        ("tenants", "0001_initial"),
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
    ]

    operations = [
        migrations.AlterModelOptions(
            name="featureentitlement",
            options={
                "ordering": ("feature_key", "feature_code"),
                "verbose_name": "feature entitlement",
                "verbose_name_plural": "feature entitlements",
            },
        ),
        migrations.AlterModelOptions(
            name="tenantfeatureoverride",
            options={
                "ordering": ("feature_key", "name"),
                "verbose_name": "feature override",
                "verbose_name_plural": "feature overrides",
            },
        ),
        migrations.RemoveConstraint(
            model_name="featureentitlement",
            name="modules_feature_entitlement_unique_scope",
        ),
        migrations.RemoveIndex(
            model_name="featureentitlement",
            name="platform_mo_tenant__cbddff_idx",
        ),
        migrations.RenameIndex(
            model_name="tenantfeatureoverride",
            new_name="platform_mo_tenant__96cf24_idx",
            old_name="platform_mo_tfoverride_fkey_idx",
        ),
        migrations.AddField(
            model_name="featureentitlement",
            name="feature_key",
            field=models.CharField(
                blank=True,
                db_index=True,
                default="",
                help_text="Dotted key, e.g. 'crm.pipeline'. Primary lookup for licensing decisions.",
                max_length=120,
                verbose_name="feature key",
            ),
        ),
        migrations.AlterField(
            model_name="featureentitlement",
            name="module",
            field=models.ForeignKey(
                blank=True,
                help_text="Provisioning reference. Nullable — feature_key is the primary key.",
                null=True,
                on_delete=django.db.models.deletion.CASCADE,
                related_name="entitlements",
                to="platform_modules.tenantmodule",
            ),
        ),
        migrations.AddIndex(
            model_name="featureentitlement",
            index=models.Index(
                fields=["tenant", "feature_key"], name="platform_mo_tenant_fkey_idx"
            ),
        ),
        migrations.AddConstraint(
            model_name="featureentitlement",
            constraint=models.UniqueConstraint(
                condition=models.Q(("module__isnull", False)),
                fields=("tenant", "module", "feature_code", "user"),
                name="modules_feature_entitlement_unique_scope",
            ),
        ),
        migrations.AddConstraint(
            model_name="featureentitlement",
            constraint=models.UniqueConstraint(
                condition=models.Q(("feature_key__gt", ""), ("module__isnull", True)),
                fields=("tenant", "feature_key", "user"),
                name="modules_entitlement_unique_fkey_scope",
            ),
        ),
    ]
