# Generated by Django 4.2.7 on 2025-12-09 21:02

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


class Migration(migrations.Migration):
    initial = True

    dependencies = [
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
        ("contenttypes", "0002_remove_content_type_name"),
    ]

    operations = [
        migrations.CreateModel(
            name="NotificationTemplate",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True,
                        primary_key=True,
                        serialize=False,
                        verbose_name="ID",
                    ),
                ),
                (
                    "notification_type",
                    models.CharField(
                        max_length=50, unique=True, verbose_name="Тип уведомления"
                    ),
                ),
                (
                    "in_app_title",
                    models.CharField(
                        blank=True,
                        max_length=200,
                        verbose_name="Заголовок (внутри приложения)",
                    ),
                ),
                (
                    "in_app_message",
                    models.TextField(
                        blank=True, verbose_name="Сообщение (внутри приложения)"
                    ),
                ),
                (
                    "email_subject",
                    models.CharField(
                        blank=True, max_length=200, verbose_name="Тема email"
                    ),
                ),
                (
                    "email_body",
                    models.TextField(blank=True, verbose_name="Тело email (HTML)"),
                ),
                (
                    "telegram_message",
                    models.TextField(blank=True, verbose_name="Сообщение Telegram"),
                ),
                (
                    "variables",
                    models.JSONField(
                        blank=True,
                        default=list,
                        help_text="Список доступных переменных для подстановки",
                        verbose_name="Переменные шаблона",
                    ),
                ),
                (
                    "is_active",
                    models.BooleanField(default=True, verbose_name="Активен"),
                ),
                (
                    "created_at",
                    models.DateTimeField(
                        auto_now_add=True, verbose_name="Дата создания"
                    ),
                ),
                (
                    "updated_at",
                    models.DateTimeField(auto_now=True, verbose_name="Дата обновления"),
                ),
            ],
            options={
                "verbose_name": "Шаблон уведомления",
                "verbose_name_plural": "Шаблоны уведомлений",
                "db_table": "notification_templates",
            },
        ),
        migrations.CreateModel(
            name="NotificationPreference",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True,
                        primary_key=True,
                        serialize=False,
                        verbose_name="ID",
                    ),
                ),
                (
                    "enabled",
                    models.BooleanField(
                        default=True, verbose_name="Уведомления включены"
                    ),
                ),
                (
                    "email_enabled",
                    models.BooleanField(default=True, verbose_name="Email уведомления"),
                ),
                (
                    "telegram_enabled",
                    models.BooleanField(
                        default=False, verbose_name="Telegram уведомления"
                    ),
                ),
                (
                    "in_app_enabled",
                    models.BooleanField(
                        default=True, verbose_name="Внутренние уведомления"
                    ),
                ),
                (
                    "type_preferences",
                    models.JSONField(
                        blank=True,
                        default=dict,
                        help_text="Настройки для каждого типа уведомлений",
                        verbose_name="Настройки по типам",
                    ),
                ),
                (
                    "quiet_hours_enabled",
                    models.BooleanField(
                        default=False, verbose_name="Режим тишины включен"
                    ),
                ),
                (
                    "quiet_hours_start",
                    models.TimeField(
                        blank=True, null=True, verbose_name="Начало режима тишины"
                    ),
                ),
                (
                    "quiet_hours_end",
                    models.TimeField(
                        blank=True, null=True, verbose_name="Конец режима тишины"
                    ),
                ),
                (
                    "created_at",
                    models.DateTimeField(
                        auto_now_add=True, verbose_name="Дата создания"
                    ),
                ),
                (
                    "updated_at",
                    models.DateTimeField(auto_now=True, verbose_name="Дата обновления"),
                ),
                (
                    "user",
                    models.OneToOneField(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="notification_preferences",
                        to=settings.AUTH_USER_MODEL,
                        verbose_name="Пользователь",
                    ),
                ),
            ],
            options={
                "verbose_name": "Настройки уведомлений",
                "verbose_name_plural": "Настройки уведомлений",
                "db_table": "notification_preferences",
            },
        ),
        migrations.CreateModel(
            name="Notification",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True,
                        primary_key=True,
                        serialize=False,
                        verbose_name="ID",
                    ),
                ),
                (
                    "notification_type",
                    models.CharField(
                        choices=[
                            ("lesson_created", "Создано занятие"),
                            ("lesson_updated", "Занятие обновлено"),
                            ("lesson_cancelled", "Занятие отменено"),
                            ("lesson_rescheduled", "Занятие перенесено"),
                            ("lesson_reminder", "Напоминание о занятии"),
                            ("lesson_started", "Занятие началось"),
                            ("lesson_completed", "Занятие завершено"),
                            ("homework_assigned", "Назначено домашнее задание"),
                            ("homework_submitted", "ДЗ сдано"),
                            ("homework_reviewed", "ДЗ проверено"),
                            ("material_added", "Добавлен материал"),
                            ("message_received", "Новое сообщение"),
                            ("subscription_expiring", "Подписка истекает"),
                            ("subscription_expired", "Подписка истекла"),
                            ("payment_received", "Платеж получен"),
                            ("system", "Системное уведомление"),
                        ],
                        db_index=True,
                        max_length=50,
                        verbose_name="Тип уведомления",
                    ),
                ),
                (
                    "channel",
                    models.CharField(
                        choices=[
                            ("in_app", "Внутри приложения"),
                            ("email", "Email"),
                            ("telegram", "Telegram"),
                        ],
                        default="in_app",
                        max_length=20,
                        verbose_name="Канал отправки",
                    ),
                ),
                (
                    "priority",
                    models.CharField(
                        choices=[
                            ("low", "Низкий"),
                            ("normal", "Обычный"),
                            ("high", "Высокий"),
                            ("urgent", "Срочный"),
                        ],
                        default="normal",
                        max_length=20,
                        verbose_name="Приоритет",
                    ),
                ),
                ("title", models.CharField(max_length=200, verbose_name="Заголовок")),
                ("message", models.TextField(verbose_name="Сообщение")),
                (
                    "data",
                    models.JSONField(
                        blank=True,
                        default=dict,
                        help_text="Дополнительная информация в формате JSON",
                        verbose_name="Дополнительные данные",
                    ),
                ),
                (
                    "object_id",
                    models.PositiveIntegerField(
                        blank=True, null=True, verbose_name="ID объекта"
                    ),
                ),
                (
                    "action_url",
                    models.CharField(
                        blank=True,
                        help_text="URL для перехода при клике на уведомление",
                        max_length=500,
                        verbose_name="Ссылка для действия",
                    ),
                ),
                (
                    "is_read",
                    models.BooleanField(
                        db_index=True, default=False, verbose_name="Прочитано"
                    ),
                ),
                (
                    "read_at",
                    models.DateTimeField(
                        blank=True, null=True, verbose_name="Время прочтения"
                    ),
                ),
                (
                    "is_sent",
                    models.BooleanField(default=False, verbose_name="Отправлено"),
                ),
                (
                    "sent_at",
                    models.DateTimeField(
                        blank=True, null=True, verbose_name="Время отправки"
                    ),
                ),
                (
                    "send_error",
                    models.TextField(blank=True, verbose_name="Ошибка отправки"),
                ),
                (
                    "created_at",
                    models.DateTimeField(
                        auto_now_add=True, db_index=True, verbose_name="Дата создания"
                    ),
                ),
                (
                    "scheduled_for",
                    models.DateTimeField(
                        blank=True,
                        help_text="Время когда нужно отправить уведомление",
                        null=True,
                        verbose_name="Запланировано на",
                    ),
                ),
                (
                    "expires_at",
                    models.DateTimeField(
                        blank=True,
                        help_text="После этого времени уведомление неактуально",
                        null=True,
                        verbose_name="Истекает",
                    ),
                ),
                (
                    "content_type",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.CASCADE,
                        to="contenttypes.contenttype",
                        verbose_name="Тип объекта",
                    ),
                ),
                (
                    "recipient",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="notifications",
                        to=settings.AUTH_USER_MODEL,
                        verbose_name="Получатель",
                    ),
                ),
            ],
            options={
                "verbose_name": "Уведомление",
                "verbose_name_plural": "Уведомления",
                "db_table": "notifications",
                "ordering": ["-created_at"],
                "indexes": [
                    models.Index(
                        fields=["recipient", "-created_at"],
                        name="notificatio_recipie_2d3764_idx",
                    ),
                    models.Index(
                        fields=["recipient", "is_read"],
                        name="notificatio_recipie_583549_idx",
                    ),
                    models.Index(
                        fields=["notification_type", "created_at"],
                        name="notificatio_notific_4b40ec_idx",
                    ),
                    models.Index(
                        fields=["is_sent", "scheduled_for"],
                        name="notificatio_is_sent_3b099f_idx",
                    ),
                ],
            },
        ),
    ]
