# Generated by Django 4.2.13 on 2024-06-07 22:27
# Move Profile and RegisteredSubdomain to privaterelay app
# Other half is
# emails/migrations/0062_move_profile_and_registered_subdomain_models.py
# See https://davit.hashnode.dev/django-move-model, solution #2

import uuid

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

from privaterelay.validators import valid_available_subdomain


class Migration(migrations.Migration):

    initial = True

    dependencies = [
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
        ("privaterelay", "0009_remove_duplicate_index"),
        ("emails", "0062_move_profile_and_registered_subdomain_models"),
    ]

    state_operations = [
        migrations.CreateModel(
            name="RegisteredSubdomain",
            fields=[
                (
                    "id",
                    models.AutoField(
                        auto_created=True,
                        primary_key=True,
                        serialize=False,
                        verbose_name="ID",
                    ),
                ),
                (
                    "subdomain_hash",
                    models.CharField(db_index=True, max_length=64, unique=True),
                ),
                ("registered_at", models.DateTimeField(auto_now_add=True)),
            ],
            options={
                "db_table": "emails_registeredsubdomain",
            },
        ),
        migrations.CreateModel(
            name="Profile",
            fields=[
                (
                    "id",
                    models.AutoField(
                        auto_created=True,
                        primary_key=True,
                        serialize=False,
                        verbose_name="ID",
                    ),
                ),
                ("api_token", models.UUIDField(default=uuid.uuid4)),
                ("num_address_deleted", models.PositiveIntegerField(default=0)),
                ("date_subscribed", models.DateTimeField(blank=True, null=True)),
                ("date_subscribed_phone", models.DateTimeField(blank=True, null=True)),
                (
                    "date_phone_subscription_checked",
                    models.DateTimeField(blank=True, null=True),
                ),
                (
                    "date_phone_subscription_start",
                    models.DateTimeField(blank=True, null=True),
                ),
                (
                    "date_phone_subscription_reset",
                    models.DateTimeField(blank=True, null=True),
                ),
                (
                    "date_phone_subscription_end",
                    models.DateTimeField(blank=True, null=True),
                ),
                (
                    "address_last_deleted",
                    models.DateTimeField(blank=True, db_index=True, null=True),
                ),
                (
                    "last_soft_bounce",
                    models.DateTimeField(blank=True, db_index=True, null=True),
                ),
                (
                    "last_hard_bounce",
                    models.DateTimeField(blank=True, db_index=True, null=True),
                ),
                (
                    "last_account_flagged",
                    models.DateTimeField(blank=True, db_index=True, null=True),
                ),
                ("num_deleted_relay_addresses", models.PositiveIntegerField(default=0)),
                (
                    "num_deleted_domain_addresses",
                    models.PositiveIntegerField(default=0),
                ),
                (
                    "num_email_forwarded_in_deleted_address",
                    models.PositiveIntegerField(default=0),
                ),
                (
                    "num_email_blocked_in_deleted_address",
                    models.PositiveIntegerField(default=0),
                ),
                (
                    "num_level_one_trackers_blocked_in_deleted_address",
                    models.PositiveIntegerField(default=0, null=True),
                ),
                (
                    "num_email_replied_in_deleted_address",
                    models.PositiveIntegerField(default=0),
                ),
                (
                    "num_email_spam_in_deleted_address",
                    models.PositiveIntegerField(default=0),
                ),
                (
                    "subdomain",
                    models.CharField(
                        blank=True,
                        db_index=True,
                        max_length=63,
                        null=True,
                        unique=True,
                        validators=[valid_available_subdomain],
                    ),
                ),
                ("server_storage", models.BooleanField(default=True)),
                ("store_phone_log", models.BooleanField(default=True)),
                (
                    "remove_level_one_email_trackers",
                    models.BooleanField(default=False, null=True),
                ),
                ("onboarding_state", models.PositiveIntegerField(default=0)),
                ("onboarding_free_state", models.PositiveIntegerField(default=0)),
                ("auto_block_spam", models.BooleanField(default=False)),
                ("forwarded_first_reply", models.BooleanField(default=False)),
                ("created_by", models.CharField(blank=True, max_length=63, null=True)),
                ("sent_welcome_email", models.BooleanField(default=False)),
                (
                    "last_engagement",
                    models.DateTimeField(blank=True, db_index=True, null=True),
                ),
                (
                    "user",
                    models.OneToOneField(
                        on_delete=django.db.models.deletion.CASCADE,
                        to=settings.AUTH_USER_MODEL,
                    ),
                ),
            ],
            options={
                "db_table": "emails_profile",
            },
        ),
    ]
    operations = [
        migrations.SeparateDatabaseAndState(state_operations=state_operations),
    ]
