# Generated by Django 5.2.8 on 2026-01-02 18:24

import django.db.models.deletion
import uuid
from django.conf import settings
from django.db import migrations, models


class Migration(migrations.Migration):

    initial = True

    dependencies = [
        ("tenant", "0001_initial"),
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
    ]

    operations = [
        migrations.CreateModel(
            name="NotificationCategory",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True,
                        primary_key=True,
                        serialize=False,
                        verbose_name="ID",
                    ),
                ),
                (
                    "name",
                    models.CharField(
                        help_text="نام یکتا برای شناسایی (مثلاً transaction)",
                        max_length=100,
                        verbose_name="نام",
                    ),
                ),
                (
                    "label",
                    models.CharField(
                        help_text="عنوان نمایشی (مثلاً تراکنش مالی)",
                        max_length=255,
                        verbose_name="عنوان",
                    ),
                ),
                (
                    "description",
                    models.TextField(blank=True, null=True, verbose_name="توضیحات"),
                ),
                (
                    "icon",
                    models.CharField(
                        blank=True,
                        help_text="نام آیکون (اختیاری)",
                        max_length=50,
                        null=True,
                        verbose_name="آیکون",
                    ),
                ),
                (
                    "color",
                    models.CharField(
                        default="#6B7280",
                        help_text="کد رنگ هگز",
                        max_length=7,
                        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="تاریخ بروزرسانی"),
                ),
                (
                    "tenant",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="%(class)s_set",
                        to="tenant.tenant",
                    ),
                ),
            ],
            options={
                "verbose_name": "دسته\u200cبندی نوتیفیکیشن",
                "verbose_name_plural": "دسته\u200cبندی\u200cهای نوتیفیکیشن",
                "db_table": "notification_category",
                "ordering": ["name"],
                "unique_together": {("tenant", "name")},
            },
        ),
        migrations.CreateModel(
            name="NotificationTemplate",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True,
                        primary_key=True,
                        serialize=False,
                        verbose_name="ID",
                    ),
                ),
                (
                    "name",
                    models.CharField(
                        help_text="نام یکتا برای شناسایی (مثلاً welcome_email)",
                        max_length=100,
                        verbose_name="نام",
                    ),
                ),
                (
                    "title",
                    models.CharField(
                        help_text="عنوان نمایشی", max_length=255, verbose_name="عنوان"
                    ),
                ),
                (
                    "channel",
                    models.CharField(
                        choices=[
                            ("sms", "SMS"),
                            ("email", "Email"),
                            ("panel", "Panel"),
                        ],
                        max_length=20,
                        verbose_name="کانال",
                    ),
                ),
                (
                    "subject",
                    models.CharField(
                        blank=True,
                        help_text="موضوع ایمیل (فقط برای کانال email)",
                        max_length=255,
                        verbose_name="موضوع",
                    ),
                ),
                (
                    "content",
                    models.TextField(
                        help_text="محتوای template با پشتیبانی از Jinja2",
                        verbose_name="محتوا",
                    ),
                ),
                (
                    "variables",
                    models.JSONField(
                        default=list,
                        help_text="لیست متغیرهای مورد نیاز template",
                        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="تاریخ بروزرسانی"),
                ),
                (
                    "category",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="templates",
                        to="notification.notificationcategory",
                        verbose_name="دسته\u200cبندی",
                    ),
                ),
                (
                    "tenant",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="%(class)s_set",
                        to="tenant.tenant",
                    ),
                ),
            ],
            options={
                "verbose_name": "قالب نوتیفیکیشن",
                "verbose_name_plural": "قالب\u200cهای نوتیفیکیشن",
                "db_table": "notification_template",
                "ordering": ["-created_at"],
                "unique_together": {("tenant", "name")},
            },
        ),
        migrations.CreateModel(
            name="Notification",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                (
                    "channel",
                    models.CharField(
                        choices=[
                            ("sms", "SMS"),
                            ("email", "Email"),
                            ("panel", "Panel"),
                        ],
                        max_length=20,
                        verbose_name="کانال",
                    ),
                ),
                ("title", models.CharField(max_length=255, verbose_name="عنوان")),
                (
                    "content",
                    models.TextField(help_text="محتوای رندر شده", verbose_name="محتوا"),
                ),
                (
                    "priority",
                    models.CharField(
                        choices=[
                            ("low", "کم"),
                            ("normal", "معمولی"),
                            ("high", "زیاد"),
                            ("urgent", "فوری"),
                        ],
                        default="normal",
                        max_length=10,
                        verbose_name="اولویت",
                    ),
                ),
                (
                    "status",
                    models.CharField(
                        choices=[
                            ("pending", "در انتظار"),
                            ("sent", "ارسال شده"),
                            ("delivered", "تحویل شده"),
                            ("failed", "خطا"),
                            ("read", "خوانده شده"),
                        ],
                        default="pending",
                        max_length=20,
                        verbose_name="وضعیت",
                    ),
                ),
                (
                    "is_read",
                    models.BooleanField(default=False, verbose_name="خوانده شده"),
                ),
                (
                    "read_at",
                    models.DateTimeField(
                        blank=True, null=True, verbose_name="زمان خواندن"
                    ),
                ),
                (
                    "scheduled_at",
                    models.DateTimeField(
                        blank=True,
                        null=True,
                        verbose_name="زمان ارسال برنامه\u200cریزی شده",
                    ),
                ),
                (
                    "sent_at",
                    models.DateTimeField(
                        blank=True, null=True, verbose_name="زمان ارسال"
                    ),
                ),
                (
                    "metadata",
                    models.JSONField(
                        default=dict,
                        help_text="اطلاعات اضافی مثل link، action و غیره",
                        verbose_name="اطلاعات اضافی",
                    ),
                ),
                (
                    "created_at",
                    models.DateTimeField(auto_now_add=True, verbose_name="تاریخ ایجاد"),
                ),
                (
                    "tenant",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="%(class)s_set",
                        to="tenant.tenant",
                    ),
                ),
                (
                    "user",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="notifications",
                        to=settings.AUTH_USER_MODEL,
                        verbose_name="گیرنده",
                    ),
                ),
                (
                    "category",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="notifications",
                        to="notification.notificationcategory",
                        verbose_name="دسته\u200cبندی",
                    ),
                ),
                (
                    "template",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="notifications",
                        to="notification.notificationtemplate",
                        verbose_name="قالب",
                    ),
                ),
            ],
            options={
                "verbose_name": "نوتیفیکیشن",
                "verbose_name_plural": "نوتیفیکیشن\u200cها",
                "db_table": "notification",
                "ordering": ["-created_at"],
            },
        ),
        migrations.CreateModel(
            name="UserNotificationPreference",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True,
                        primary_key=True,
                        serialize=False,
                        verbose_name="ID",
                    ),
                ),
                (
                    "sms_enabled",
                    models.BooleanField(default=True, verbose_name="SMS فعال"),
                ),
                (
                    "email_enabled",
                    models.BooleanField(default=True, verbose_name="Email فعال"),
                ),
                (
                    "panel_enabled",
                    models.BooleanField(default=True, verbose_name="Panel فعال"),
                ),
                (
                    "created_at",
                    models.DateTimeField(auto_now_add=True, verbose_name="تاریخ ایجاد"),
                ),
                (
                    "updated_at",
                    models.DateTimeField(auto_now=True, verbose_name="تاریخ بروزرسانی"),
                ),
                (
                    "category",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="user_preferences",
                        to="notification.notificationcategory",
                        verbose_name="دسته\u200cبندی",
                    ),
                ),
                (
                    "tenant",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="%(class)s_set",
                        to="tenant.tenant",
                    ),
                ),
                (
                    "user",
                    models.ForeignKey(
                        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": "user_notification_preference",
            },
        ),
        migrations.CreateModel(
            name="NotificationLog",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True,
                        primary_key=True,
                        serialize=False,
                        verbose_name="ID",
                    ),
                ),
                (
                    "channel",
                    models.CharField(
                        choices=[
                            ("sms", "SMS"),
                            ("email", "Email"),
                            ("panel", "Panel"),
                        ],
                        max_length=20,
                        verbose_name="کانال",
                    ),
                ),
                (
                    "status",
                    models.CharField(
                        choices=[
                            ("pending", "در انتظار"),
                            ("sent", "ارسال شده"),
                            ("delivered", "تحویل شده"),
                            ("failed", "خطا"),
                            ("read", "خوانده شده"),
                        ],
                        default="pending",
                        max_length=20,
                        verbose_name="وضعیت",
                    ),
                ),
                (
                    "provider_response",
                    models.JSONField(
                        default=dict,
                        help_text="پاسخ دریافتی از SMS/Email provider",
                        verbose_name="پاسخ provider",
                    ),
                ),
                (
                    "error_message",
                    models.TextField(blank=True, null=True, verbose_name="پیام خطا"),
                ),
                (
                    "retry_count",
                    models.IntegerField(default=0, verbose_name="تعداد تلاش"),
                ),
                (
                    "created_at",
                    models.DateTimeField(auto_now_add=True, verbose_name="تاریخ ایجاد"),
                ),
                (
                    "notification",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="logs",
                        to="notification.notification",
                        verbose_name="نوتیفیکیشن",
                    ),
                ),
                (
                    "tenant",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="%(class)s_set",
                        to="tenant.tenant",
                    ),
                ),
            ],
            options={
                "verbose_name": "لاگ نوتیفیکیشن",
                "verbose_name_plural": "لاگ\u200cهای نوتیفیکیشن",
                "db_table": "notification_log",
                "ordering": ["-created_at"],
                "indexes": [
                    models.Index(
                        fields=["notification", "status"],
                        name="notificatio_notific_0e8d4c_idx",
                    ),
                    models.Index(
                        fields=["created_at"], name="notificatio_created_d4efe0_idx"
                    ),
                ],
            },
        ),
        migrations.AddIndex(
            model_name="notification",
            index=models.Index(
                fields=["user", "is_read"], name="notificatio_user_id_d569bc_idx"
            ),
        ),
        migrations.AddIndex(
            model_name="notification",
            index=models.Index(
                fields=["user", "status"], name="notificatio_user_id_dae2a2_idx"
            ),
        ),
        migrations.AddIndex(
            model_name="notification",
            index=models.Index(
                fields=["scheduled_at"], name="notificatio_schedul_c1f051_idx"
            ),
        ),
        migrations.AddIndex(
            model_name="notification",
            index=models.Index(
                fields=["status", "created_at"], name="notificatio_status_4ebed8_idx"
            ),
        ),
        migrations.AlterUniqueTogether(
            name="usernotificationpreference",
            unique_together={("user", "category")},
        ),
    ]
