"""Change Membership.user (FK) to Membership.users (M2M).

The previous design forced one record per user; this migration converts the
model so that one Membership record (tenant + org_node + role) can be shared
by multiple users simultaneously.

Migration steps:
  1. Remove the old UniqueConstraint that included `user_id`.
  2. Drop the `user` ForeignKey column.
  3. Create the `users` M2M through-table.
  4. Add a new UniqueConstraint on (tenant, organization_node, role).
"""

from __future__ import annotations

import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models


class Migration(migrations.Migration):

    dependencies = [
        ("memberships", "0001_initial"),
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
    ]

    operations = [
        # 1. Drop the old constraint that referenced `user`.
        migrations.RemoveConstraint(
            model_name="membership",
            name="memberships_unique_user_tenant_node_role",
        ),
        # 2. Remove the `user` FK column.
        migrations.RemoveField(
            model_name="membership",
            name="user",
        ),
        # 3. Add the `users` M2M field.
        migrations.AddField(
            model_name="membership",
            name="users",
            field=models.ManyToManyField(
                blank=True,
                related_name="memberships",
                to=settings.AUTH_USER_MODEL,
                verbose_name="users",
            ),
        ),
        # 4. Add new uniqueness constraint (one membership record per tenant+node+role).
        migrations.AddConstraint(
            model_name="membership",
            constraint=models.UniqueConstraint(
                fields=("tenant", "organization_node", "role"),
                name="memberships_unique_tenant_node_role",
            ),
        ),
    ]
