# Generated by Django 5.1.3 on 2026-05-25 08:34

import django.db.models.deletion
import uuid
from django.db import migrations, models


class Migration(migrations.Migration):

    dependencies = [
        ("accounts", "0002_userprofile"),
        ("tenants", "0001_initial"),
    ]

    operations = [
        migrations.AddField(
            model_name="user",
            name="mobile",
            field=models.CharField(
                blank=True,
                db_index=True,
                help_text="E.164 format, e.g. +989123456789",
                max_length=20,
                null=True,
                unique=True,
                verbose_name="mobile number",
            ),
        ),
        migrations.CreateModel(
            name="ActiveDirectoryConfig",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
                    ),
                ),
                (
                    "created_at",
                    models.DateTimeField(
                        auto_now_add=True, db_index=True, verbose_name="created at"
                    ),
                ),
                ("updated_at", models.DateTimeField(auto_now=True, verbose_name="updated at")),
                (
                    "server_url",
                    models.CharField(
                        blank=True,
                        default="",
                        help_text="e.g. ldap://dc.example.com or ldaps://dc.example.com:636",
                        max_length=256,
                        verbose_name="LDAP server URL",
                    ),
                ),
                (
                    "domain",
                    models.CharField(blank=True, default="", max_length=256, verbose_name="domain"),
                ),
                (
                    "base_dn",
                    models.CharField(
                        blank=True,
                        default="",
                        help_text="e.g. DC=example,DC=com",
                        max_length=512,
                        verbose_name="base DN",
                    ),
                ),
                (
                    "user_search_filter",
                    models.CharField(
                        default="(sAMAccountName={username})",
                        help_text="Use {username} as placeholder for the login name.",
                        max_length=256,
                        verbose_name="user search filter",
                    ),
                ),
                (
                    "service_account_dn",
                    models.CharField(
                        blank=True, default="", max_length=512, verbose_name="service account DN"
                    ),
                ),
                (
                    "service_account_password",
                    models.CharField(
                        blank=True,
                        default="",
                        max_length=256,
                        verbose_name="service account password",
                    ),
                ),
                ("is_active", models.BooleanField(default=False, verbose_name="active")),
                (
                    "tenant",
                    models.OneToOneField(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="ad_config",
                        to="tenants.tenant",
                        verbose_name="tenant",
                    ),
                ),
            ],
            options={
                "verbose_name": "Active Directory config",
                "verbose_name_plural": "Active Directory configs",
            },
        ),
        migrations.CreateModel(
            name="AuthMethodConfig",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
                    ),
                ),
                (
                    "created_at",
                    models.DateTimeField(
                        auto_now_add=True, db_index=True, verbose_name="created at"
                    ),
                ),
                ("updated_at", models.DateTimeField(auto_now=True, verbose_name="updated at")),
                (
                    "is_password_enabled",
                    models.BooleanField(default=True, verbose_name="password login"),
                ),
                (
                    "is_mobile_otp_enabled",
                    models.BooleanField(default=False, verbose_name="mobile OTP login"),
                ),
                (
                    "is_ad_enabled",
                    models.BooleanField(default=False, verbose_name="Active Directory login"),
                ),
                (
                    "is_google_enabled",
                    models.BooleanField(default=False, verbose_name="Google login"),
                ),
                (
                    "is_github_enabled",
                    models.BooleanField(default=False, verbose_name="GitHub login"),
                ),
                (
                    "is_microsoft_enabled",
                    models.BooleanField(default=False, verbose_name="Microsoft login"),
                ),
                (
                    "tenant",
                    models.OneToOneField(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="auth_method_config",
                        to="tenants.tenant",
                        verbose_name="tenant",
                    ),
                ),
            ],
            options={
                "verbose_name": "Auth method config",
                "verbose_name_plural": "Auth method configs",
            },
        ),
        migrations.CreateModel(
            name="SocialAuthConfig",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
                    ),
                ),
                (
                    "created_at",
                    models.DateTimeField(
                        auto_now_add=True, db_index=True, verbose_name="created at"
                    ),
                ),
                ("updated_at", models.DateTimeField(auto_now=True, verbose_name="updated at")),
                (
                    "google_client_id",
                    models.CharField(
                        blank=True, default="", max_length=256, verbose_name="Google client ID"
                    ),
                ),
                (
                    "google_client_secret",
                    models.CharField(
                        blank=True, default="", max_length=256, verbose_name="Google client secret"
                    ),
                ),
                (
                    "google_enabled",
                    models.BooleanField(default=False, verbose_name="Google enabled"),
                ),
                (
                    "github_client_id",
                    models.CharField(
                        blank=True, default="", max_length=256, verbose_name="GitHub client ID"
                    ),
                ),
                (
                    "github_client_secret",
                    models.CharField(
                        blank=True, default="", max_length=256, verbose_name="GitHub client secret"
                    ),
                ),
                (
                    "github_enabled",
                    models.BooleanField(default=False, verbose_name="GitHub enabled"),
                ),
                (
                    "microsoft_client_id",
                    models.CharField(
                        blank=True, default="", max_length=256, verbose_name="Microsoft client ID"
                    ),
                ),
                (
                    "microsoft_client_secret",
                    models.CharField(
                        blank=True,
                        default="",
                        max_length=256,
                        verbose_name="Microsoft client secret",
                    ),
                ),
                (
                    "microsoft_enabled",
                    models.BooleanField(default=False, verbose_name="Microsoft enabled"),
                ),
                (
                    "tenant",
                    models.OneToOneField(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="social_auth_config",
                        to="tenants.tenant",
                        verbose_name="tenant",
                    ),
                ),
            ],
            options={
                "verbose_name": "Social auth config",
                "verbose_name_plural": "Social auth configs",
            },
        ),
        migrations.CreateModel(
            name="MobileOtpToken",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
                    ),
                ),
                (
                    "created_at",
                    models.DateTimeField(
                        auto_now_add=True, db_index=True, verbose_name="created at"
                    ),
                ),
                ("updated_at", models.DateTimeField(auto_now=True, verbose_name="updated at")),
                (
                    "public_id",
                    models.UUIDField(
                        db_index=True,
                        default=uuid.uuid4,
                        editable=False,
                        unique=True,
                        verbose_name="public id",
                    ),
                ),
                ("mobile", models.CharField(db_index=True, max_length=20, verbose_name="mobile")),
                ("code_hash", models.CharField(max_length=128, verbose_name="code hash")),
                ("expires_at", models.DateTimeField(verbose_name="expires at")),
                ("is_used", models.BooleanField(db_index=True, default=False, verbose_name="used")),
                ("attempts", models.PositiveSmallIntegerField(default=0, verbose_name="attempts")),
                (
                    "tenant",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="+",
                        to="tenants.tenant",
                        verbose_name="tenant",
                    ),
                ),
            ],
            options={
                "verbose_name": "Mobile OTP token",
                "verbose_name_plural": "Mobile OTP tokens",
                "indexes": [
                    models.Index(
                        fields=["mobile", "is_used", "expires_at"],
                        name="accounts_mo_mobile_672be9_idx",
                    )
                ],
            },
        ),
    ]
