"""Phase D cleanup — Drop deprecated models and fields.

Steps 0009-0015 from the taxonomy refactor plan:
  0009: Drop Tier FK from FeatureCatalog, ModuleCatalog
  0010: Drop module FK from TenantFeatureOverride
  0011: Drop module FK from FeatureEntitlement
  0012: Drop feature_code from FeatureEntitlement
  0013: Drop ModuleFeature table
  0014: Drop FeatureGroup table
  0015: Drop Tier table

Step 0008 (3-level key migration) is handled by a management command
since it requires access to the live module registry.
"""

from django.db import migrations, models


class Migration(migrations.Migration):
    dependencies = [
        ("platform_modules", "0015_phase_a_domain_capability"),
        ("subscription", "0003_phase_b_addon_plan_rename"),
    ]

    operations = [
        # ── 0009: Drop tier FK from FeatureCatalog ────────────────────────
        migrations.RemoveField(
            model_name="featurecatalog",
            name="tier",
        ),
        # ── 0009: Drop tier FK from ModuleCatalog ─────────────────────────
        migrations.RemoveField(
            model_name="modulecatalog",
            name="tier",
        ),
        # ── 0010: Drop module FK from TenantFeatureOverride ───────────────
        # First drop the unique constraint that references module
        migrations.RemoveConstraint(
            model_name="tenantfeatureoverride",
            name="modules_featureoverride_unique_fkey_scope",
        ),
        migrations.RemoveField(
            model_name="tenantfeatureoverride",
            name="module",
        ),
        # Re-add unique constraint without module
        migrations.AddConstraint(
            model_name="tenantfeatureoverride",
            constraint=models.UniqueConstraint(
                fields=("tenant", "feature_key", "user"),
                name="modules_featureoverride_unique_fkey_scope_v2",
            ),
        ),
        # ── 0011: Drop module FK from FeatureEntitlement ──────────────────
        migrations.RemoveConstraint(
            model_name="featureentitlement",
            name="modules_feature_entitlement_unique_scope",
        ),
        migrations.RemoveConstraint(
            model_name="featureentitlement",
            name="modules_entitlement_unique_fkey_scope",
        ),
        migrations.RemoveField(
            model_name="featureentitlement",
            name="module",
        ),
        # ── 0012: Drop feature_code from FeatureEntitlement ───────────────
        migrations.RemoveField(
            model_name="featureentitlement",
            name="feature_code",
        ),
        # Add unified unique constraint: (tenant, feature_key, user)
        migrations.AddConstraint(
            model_name="featureentitlement",
            constraint=models.UniqueConstraint(
                fields=("tenant", "feature_key", "user"),
                name="modules_entitlement_unique_scope_v2",
                condition=models.Q(feature_key__gt=""),
            ),
        ),
        # ── 0013: Drop ModuleFeature table ────────────────────────────────
        migrations.DeleteModel(
            name="modulefeature",
        ),
        # ── 0014: Drop FeatureGroup table ─────────────────────────────────
        # FeatureCatalog.group FK is SET_NULL, so safe to drop
        migrations.RemoveField(
            model_name="featurecatalog",
            name="group",
        ),
        migrations.DeleteModel(
            name="featuregroup",
        ),
        # ── 0015: Drop Tier table ─────────────────────────────────────────
        migrations.DeleteModel(
            name="tier",
        ),
    ]
