# Generated by Django 5.2 on 2025-04-02 19:43

import apps.organizations_ext.fields
import django.core.validators
import django.db.models.deletion
import django.utils.timezone
import organizations.fields
from django.conf import settings
from django.db import migrations, models


class Migration(migrations.Migration):
    replaces = [
        (
            "organizations_ext",
            "0001_squashed_0003_alter_organization_id_alter_organization_users_and_more",
        ),
        ("organizations_ext", "0004_organizationsubscription_alter_organization_slug"),
        ("organizations_ext", "0005_organization_event_throttle_rate"),
        ("organizations_ext", "0006_organization_stripe_subscription_id"),
        (
            "organizations_ext",
            "0007_rename_stripe_subscription_id_organization_stripe_customer_id",
        ),
        ("organizations_ext", "0006_organizationsocialapp"),
        ("organizations_ext", "0008_merge_20250210_1625"),
    ]

    initial = True

    dependencies = [
        ("socialaccount", "0006_alter_socialaccount_extra_data"),
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
    ]

    operations = [
        migrations.CreateModel(
            name="Organization",
            fields=[
                (
                    "id",
                    models.AutoField(
                        auto_created=True,
                        primary_key=True,
                        serialize=False,
                        verbose_name="ID",
                    ),
                ),
                (
                    "name",
                    models.CharField(
                        help_text="The name of the organization", max_length=200
                    ),
                ),
                ("is_active", models.BooleanField(default=True)),
                (
                    "created",
                    organizations.fields.AutoCreatedField(
                        default=django.utils.timezone.now, editable=False
                    ),
                ),
                (
                    "modified",
                    organizations.fields.AutoLastModifiedField(
                        default=django.utils.timezone.now, editable=False
                    ),
                ),
                (
                    "slug",
                    organizations.fields.SlugField(
                        blank=True,
                        editable=False,
                        help_text="The name in all lowercase, suitable for URL identification",
                        max_length=200,
                        populate_from="name",
                        unique=True,
                    ),
                ),
            ],
            options={
                "abstract": False,
            },
        ),
        migrations.CreateModel(
            name="OrganizationUser",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True,
                        primary_key=True,
                        serialize=False,
                        verbose_name="ID",
                    ),
                ),
                (
                    "created",
                    organizations.fields.AutoCreatedField(
                        default=django.utils.timezone.now, editable=False
                    ),
                ),
                (
                    "modified",
                    organizations.fields.AutoLastModifiedField(
                        default=django.utils.timezone.now, editable=False
                    ),
                ),
                (
                    "role",
                    models.PositiveSmallIntegerField(
                        choices=[
                            (0, "Member"),
                            (1, "Admin"),
                            (2, "Manager"),
                            (3, "Owner"),
                        ]
                    ),
                ),
                (
                    "organization",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="organization_users",
                        to="organizations_ext.organization",
                    ),
                ),
                (
                    "user",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="organizations_ext_organizationuser",
                        to=settings.AUTH_USER_MODEL,
                    ),
                ),
                (
                    "email",
                    models.EmailField(
                        blank=True,
                        help_text="Email for pending invite",
                        max_length=254,
                        null=True,
                    ),
                ),
            ],
            options={
                "abstract": False,
                "unique_together": {
                    ("email", "organization"),
                    ("user", "organization"),
                },
            },
        ),
        migrations.AddField(
            model_name="organization",
            name="users",
            field=models.ManyToManyField(
                related_name="%(app_label)s_%(class)s",
                through="organizations_ext.OrganizationUser",
                to=settings.AUTH_USER_MODEL,
            ),
        ),
        migrations.AddField(
            model_name="organization",
            name="is_accepting_events",
            field=models.BooleanField(
                default=True, help_text="Used for throttling at org level"
            ),
        ),
        migrations.AddField(
            model_name="organization",
            name="open_membership",
            field=models.BooleanField(
                default=True, help_text="Allow any organization member to join any team"
            ),
        ),
        migrations.AddField(
            model_name="organization",
            name="scrub_ip_addresses",
            field=models.BooleanField(
                default=True,
                help_text="Default for whether projects should script IP Addresses",
            ),
        ),
        migrations.AlterField(
            model_name="organization",
            name="id",
            field=models.BigAutoField(
                auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
            ),
        ),
        migrations.CreateModel(
            name="OrganizationInvitation",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True,
                        primary_key=True,
                        serialize=False,
                        verbose_name="ID",
                    ),
                ),
                ("guid", models.UUIDField(editable=False)),
                (
                    "invitee_identifier",
                    models.CharField(
                        help_text="The contact identifier for the invitee, email, phone number, social media handle, etc.",
                        max_length=1000,
                    ),
                ),
                (
                    "invited_by",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="%(app_label)s_%(class)s_sent_invitations",
                        to=settings.AUTH_USER_MODEL,
                    ),
                ),
                (
                    "invitee",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="%(app_label)s_%(class)s_invitations",
                        to=settings.AUTH_USER_MODEL,
                    ),
                ),
                (
                    "organization",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="organization_invites",
                        to="organizations_ext.organization",
                    ),
                ),
            ],
            options={
                "abstract": False,
            },
        ),
        migrations.CreateModel(
            name="OrganizationOwner",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True,
                        primary_key=True,
                        serialize=False,
                        verbose_name="ID",
                    ),
                ),
                (
                    "organization",
                    models.OneToOneField(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="owner",
                        to="organizations_ext.organization",
                    ),
                ),
                (
                    "organization_user",
                    models.OneToOneField(
                        on_delete=django.db.models.deletion.CASCADE,
                        to="organizations_ext.organizationuser",
                    ),
                ),
            ],
            options={
                "abstract": False,
            },
        ),
        migrations.CreateModel(
            name="OrganizationSubscription",
            fields=[],
            options={
                "proxy": True,
                "indexes": [],
                "constraints": [],
            },
            bases=("organizations_ext.organization",),
        ),
        migrations.AlterField(
            model_name="organization",
            name="slug",
            field=apps.organizations_ext.fields.OrganizationSlugField(
                blank=True,
                editable=False,
                help_text="The name in all lowercase, suitable for URL identification",
                max_length=200,
                populate_from="name",
                unique=True,
            ),
        ),
        migrations.AddField(
            model_name="organization",
            name="event_throttle_rate",
            field=models.PositiveSmallIntegerField(
                default=0,
                help_text="Probability (in percent) on how many events are throttled. Used for throttling at project level",
                validators=[django.core.validators.MaxValueValidator(100)],
            ),
        ),
        migrations.AddField(
            model_name="organization",
            name="stripe_customer_id",
            field=models.CharField(blank=True, max_length=28),
        ),
        migrations.CreateModel(
            name="OrganizationSocialApp",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True,
                        primary_key=True,
                        serialize=False,
                        verbose_name="ID",
                    ),
                ),
                (
                    "organization",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        to="organizations_ext.organization",
                    ),
                ),
                (
                    "social_app",
                    models.OneToOneField(
                        on_delete=django.db.models.deletion.CASCADE,
                        to="socialaccount.socialapp",
                    ),
                ),
            ],
        ),
    ]
