# Generated by Django 6.0.4 on 2026-07-29 06:22, hand-adjusted:
# RenameModel instead of Create+Delete so the existing org_profile row/table survives.

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


def bootstrap_csis_organization(apps, schema_editor):
    Organization = apps.get_model('companies', 'Organization')
    OrganizationMembership = apps.get_model('companies', 'OrganizationMembership')
    User = apps.get_model(settings.AUTH_USER_MODEL)

    org = Organization.objects.first()
    if org is None:
        org = Organization.objects.create(name="CSIS Indonesia")
    elif org.name in ("", "My Organization"):
        org.name = "CSIS Indonesia"
        org.save(update_fields=["name"])

    if not org.slug:
        org.slug = org.name.lower().replace(" ", "-")
        org.save(update_fields=["slug"])

    existing_member_ids = set(
        OrganizationMembership.objects.filter(organization=org).values_list("user_id", flat=True)
    )
    memberships = [
        OrganizationMembership(organization=org, user=user, is_owner=user.is_superuser)
        for user in User.objects.exclude(pk__in=existing_member_ids)
    ]
    OrganizationMembership.objects.bulk_create(memberships)


def noop_reverse(apps, schema_editor):
    pass


class Migration(migrations.Migration):

    dependencies = [
        ('companies', '0010_orgprofile_chart_colors'),
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
    ]

    operations = [
        migrations.RenameModel(
            old_name='OrgProfile',
            new_name='Organization',
        ),
        migrations.AlterModelTable(
            name='organization',
            table='organizations',
        ),
        migrations.AddField(
            model_name='organization',
            name='slug',
            field=models.SlugField(blank=True, max_length=255, unique=True, null=True),
        ),
        migrations.CreateModel(
            name='OrganizationMembership',
            fields=[
                ('id', models.UUIDField(default=apps.companies.models.uuid7, editable=False, primary_key=True, serialize=False)),
                ('is_owner', models.BooleanField(default=False)),
                ('created_at', models.DateTimeField(auto_now_add=True)),
                ('organization', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='memberships', to='companies.organization')),
                ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='organization_memberships', to=settings.AUTH_USER_MODEL)),
            ],
            options={
                'db_table': 'organization_memberships',
            },
        ),
        migrations.AddConstraint(
            model_name='organizationmembership',
            constraint=models.UniqueConstraint(fields=('organization', 'user'), name='unique_org_membership'),
        ),
        migrations.AddField(
            model_name='organization',
            name='members',
            field=models.ManyToManyField(related_name='organizations', through='companies.OrganizationMembership', to=settings.AUTH_USER_MODEL),
        ),
        migrations.RunPython(bootstrap_csis_organization, noop_reverse),
        migrations.AlterField(
            model_name='organization',
            name='slug',
            field=models.SlugField(blank=True, max_length=255, unique=True),
        ),
    ]
