# Generated by Django 5.2.11 on 2026-02-26 17:15

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", "0003_tenant_locale_calendar_tenant_locale_country_and_more"),
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
    ]

    operations = [
        migrations.CreateModel(
            name="Channel",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                (
                    "name",
                    models.CharField(
                        blank=True, default="", max_length=200, verbose_name="نام کانال"
                    ),
                ),
                (
                    "slug",
                    models.SlugField(
                        allow_unicode=True,
                        blank=True,
                        default="",
                        max_length=200,
                        verbose_name="نامک",
                    ),
                ),
                (
                    "description",
                    models.TextField(blank=True, default="", verbose_name="توضیحات"),
                ),
                (
                    "avatar",
                    models.ImageField(
                        blank=True,
                        null=True,
                        upload_to="chat/avatars/",
                        verbose_name="تصویر",
                    ),
                ),
                (
                    "channel_type",
                    models.CharField(
                        choices=[
                            ("direct", "خصوصی"),
                            ("group", "گروهی"),
                            ("public", "عمومی"),
                            ("project", "پروژه"),
                        ],
                        default="group",
                        max_length=20,
                        verbose_name="نوع کانال",
                    ),
                ),
                (
                    "visibility",
                    models.CharField(
                        choices=[
                            ("public", "همه Tenant"),
                            ("private", "فقط اعضا"),
                            ("project", "اعضای پروژه"),
                        ],
                        default="private",
                        max_length=20,
                        verbose_name="سطح دسترسی",
                    ),
                ),
                (
                    "source_type",
                    models.CharField(
                        blank=True,
                        default="",
                        help_text="نوع entity مرتبط (project, task, ...)",
                        max_length=50,
                        verbose_name="نوع منبع",
                    ),
                ),
                (
                    "source_id",
                    models.UUIDField(
                        blank=True, db_index=True, null=True, verbose_name="شناسه منبع"
                    ),
                ),
                (
                    "max_members",
                    models.PositiveIntegerField(
                        default=500, verbose_name="حداکثر اعضا"
                    ),
                ),
                (
                    "is_archived",
                    models.BooleanField(default=False, verbose_name="آرشیو شده"),
                ),
                (
                    "last_message_at",
                    models.DateTimeField(
                        blank=True, null=True, verbose_name="آخرین پیام"
                    ),
                ),
                (
                    "message_count",
                    models.PositiveIntegerField(default=0, verbose_name="تعداد پیام"),
                ),
                (
                    "created_at",
                    models.DateTimeField(auto_now_add=True, verbose_name="تاریخ ایجاد"),
                ),
                (
                    "updated_at",
                    models.DateTimeField(auto_now=True, verbose_name="تاریخ بروزرسانی"),
                ),
                (
                    "created_by",
                    models.ForeignKey(
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="created_channels",
                        to=settings.AUTH_USER_MODEL,
                        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": "chat_channel",
                "ordering": ["-last_message_at", "-created_at"],
            },
        ),
        migrations.CreateModel(
            name="Message",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                (
                    "message_type",
                    models.CharField(
                        choices=[
                            ("text", "متن"),
                            ("file", "فایل"),
                            ("image", "تصویر"),
                            ("system", "سیستمی"),
                        ],
                        default="text",
                        max_length=20,
                        verbose_name="نوع پیام",
                    ),
                ),
                (
                    "content",
                    models.TextField(blank=True, default="", verbose_name="محتوا"),
                ),
                (
                    "is_edited",
                    models.BooleanField(default=False, verbose_name="ویرایش شده"),
                ),
                (
                    "edited_at",
                    models.DateTimeField(
                        blank=True, null=True, verbose_name="تاریخ ویرایش"
                    ),
                ),
                (
                    "is_deleted",
                    models.BooleanField(default=False, verbose_name="حذف شده"),
                ),
                (
                    "deleted_at",
                    models.DateTimeField(
                        blank=True, null=True, verbose_name="تاریخ حذف"
                    ),
                ),
                (
                    "metadata",
                    models.JSONField(blank=True, default=dict, verbose_name="متادیتا"),
                ),
                (
                    "created_at",
                    models.DateTimeField(auto_now_add=True, verbose_name="تاریخ ایجاد"),
                ),
                (
                    "channel",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="messages",
                        to="chat.channel",
                        verbose_name="کانال",
                    ),
                ),
                (
                    "reply_to",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="replies",
                        to="chat.message",
                        verbose_name="پاسخ به",
                    ),
                ),
                (
                    "sender",
                    models.ForeignKey(
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="chat_messages",
                        to=settings.AUTH_USER_MODEL,
                        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": "chat_message",
                "ordering": ["created_at"],
            },
        ),
        migrations.CreateModel(
            name="ChannelMember",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                (
                    "role",
                    models.CharField(
                        choices=[
                            ("owner", "مالک"),
                            ("admin", "مدیر"),
                            ("member", "عضو"),
                            ("guest", "مهمان"),
                        ],
                        default="member",
                        max_length=20,
                        verbose_name="نقش",
                    ),
                ),
                (
                    "status",
                    models.CharField(
                        choices=[
                            ("active", "فعال"),
                            ("muted", "بی\u200cصدا"),
                            ("banned", "مسدود"),
                            ("left", "خارج شده"),
                        ],
                        default="active",
                        max_length=20,
                        verbose_name="وضعیت",
                    ),
                ),
                (
                    "last_read_at",
                    models.DateTimeField(
                        blank=True, null=True, verbose_name="آخرین خوانده\u200cشدن"
                    ),
                ),
                (
                    "unread_count",
                    models.PositiveIntegerField(
                        default=0, verbose_name="خوانده\u200cنشده"
                    ),
                ),
                (
                    "notifications_enabled",
                    models.BooleanField(default=True, verbose_name="اعلان فعال"),
                ),
                (
                    "joined_at",
                    models.DateTimeField(auto_now_add=True, verbose_name="تاریخ عضویت"),
                ),
                (
                    "updated_at",
                    models.DateTimeField(auto_now=True, verbose_name="تاریخ بروزرسانی"),
                ),
                (
                    "channel",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="members",
                        to="chat.channel",
                        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="chat_memberships",
                        to=settings.AUTH_USER_MODEL,
                        verbose_name="کاربر",
                    ),
                ),
                (
                    "last_read_message",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="+",
                        to="chat.message",
                        verbose_name="آخرین پیام خوانده\u200cشده",
                    ),
                ),
            ],
            options={
                "verbose_name": "عضو کانال",
                "verbose_name_plural": "اعضای کانال",
                "db_table": "chat_channel_member",
                "ordering": ["joined_at"],
            },
        ),
        migrations.CreateModel(
            name="MessageAttachment",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                (
                    "stored_file_id",
                    models.UUIDField(
                        help_text="ارجاع به StoredFile در File Service",
                        verbose_name="شناسه فایل",
                    ),
                ),
                (
                    "file_name",
                    models.CharField(max_length=500, verbose_name="نام فایل"),
                ),
                ("file_size", models.BigIntegerField(default=0, verbose_name="حجم")),
                (
                    "mime_type",
                    models.CharField(
                        blank=True, default="", max_length=255, verbose_name="نوع"
                    ),
                ),
                (
                    "created_at",
                    models.DateTimeField(auto_now_add=True, verbose_name="تاریخ ایجاد"),
                ),
                (
                    "message",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="attachments",
                        to="chat.message",
                        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": "chat_message_attachment",
                "ordering": ["created_at"],
            },
        ),
        migrations.CreateModel(
            name="MessageReadReceipt",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                (
                    "read_at",
                    models.DateTimeField(
                        auto_now_add=True, verbose_name="تاریخ خوانده\u200cشدن"
                    ),
                ),
                (
                    "message",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="read_receipts",
                        to="chat.message",
                        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="read_receipts",
                        to=settings.AUTH_USER_MODEL,
                        verbose_name="کاربر",
                    ),
                ),
            ],
            options={
                "verbose_name": "رسید خوانده\u200cشدن",
                "verbose_name_plural": "رسیدهای خوانده\u200cشدن",
                "db_table": "chat_message_read_receipt",
            },
        ),
        migrations.CreateModel(
            name="UserPresence",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                (
                    "status",
                    models.CharField(
                        choices=[
                            ("online", "آنلاین"),
                            ("away", "دور"),
                            ("busy", "مشغول"),
                            ("offline", "آفلاین"),
                        ],
                        default="offline",
                        max_length=20,
                        verbose_name="وضعیت",
                    ),
                ),
                (
                    "last_seen",
                    models.DateTimeField(auto_now=True, verbose_name="آخرین حضور"),
                ),
                (
                    "custom_status",
                    models.CharField(
                        blank=True,
                        default="",
                        max_length=200,
                        verbose_name="وضعیت سفارشی",
                    ),
                ),
                (
                    "tenant",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="%(class)s_set",
                        to="tenant.tenant",
                    ),
                ),
                (
                    "user",
                    models.OneToOneField(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="presence",
                        to=settings.AUTH_USER_MODEL,
                        verbose_name="کاربر",
                    ),
                ),
            ],
            options={
                "verbose_name": "حضور کاربر",
                "verbose_name_plural": "حضور کاربران",
                "db_table": "chat_user_presence",
            },
        ),
        migrations.AddIndex(
            model_name="channel",
            index=models.Index(
                fields=["source_type", "source_id"],
                name="chat_channe_source__2f6777_idx",
            ),
        ),
        migrations.AddIndex(
            model_name="message",
            index=models.Index(
                fields=["channel", "created_at"], name="chat_messag_channel_4b0a96_idx"
            ),
        ),
        migrations.AlterUniqueTogether(
            name="channelmember",
            unique_together={("channel", "user")},
        ),
        migrations.AlterUniqueTogether(
            name="messagereadreceipt",
            unique_together={("message", "user")},
        ),
    ]
