# Generated by Django 5.2.8 on 2026-01-03 06:42

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="TableDefinition",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                (
                    "slug",
                    models.SlugField(
                        help_text="شناسه یکتا برای URL",
                        max_length=100,
                        verbose_name="شناسه",
                    ),
                ),
                (
                    "name",
                    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="نام آیکون (مثلاً package, users)",
                        max_length=50,
                        null=True,
                        verbose_name="آیکون",
                    ),
                ),
                (
                    "settings",
                    models.JSONField(
                        blank=True,
                        default=dict,
                        help_text="تنظیمات جدول شامل allow_export, page_size و ...",
                        verbose_name="تنظیمات",
                    ),
                ),
                ("is_active", models.BooleanField(default=True, verbose_name="فعال")),
                (
                    "enable_audit",
                    models.BooleanField(
                        default=True,
                        help_text="فعال بودن ثبت تغییرات",
                        verbose_name="ثبت تاریخچه",
                    ),
                ),
                (
                    "enable_workflow",
                    models.BooleanField(
                        default=False,
                        help_text="فعال بودن گردش کار",
                        verbose_name="Workflow",
                    ),
                ),
                ("order", 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="تاریخ بروزرسانی"),
                ),
                (
                    "tenant",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="%(class)s_set",
                        to="tenant.tenant",
                    ),
                ),
            ],
            options={
                "verbose_name": "تعریف جدول",
                "verbose_name_plural": "تعریف جداول",
                "db_table": "worktable_table_definition",
                "ordering": ["order", "name"],
                "unique_together": {("tenant", "slug")},
            },
        ),
        migrations.CreateModel(
            name="SavedFilter",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                ("name", models.CharField(max_length=255, verbose_name="نام")),
                ("filters", models.JSONField(default=dict, verbose_name="فیلترها")),
                (
                    "is_default",
                    models.BooleanField(default=False, verbose_name="پیش\u200cفرض"),
                ),
                ("is_shared", models.BooleanField(default=False, verbose_name="عمومی")),
                ("order", models.PositiveIntegerField(default=0, verbose_name="ترتیب")),
                (
                    "created_at",
                    models.DateTimeField(auto_now_add=True, verbose_name="تاریخ ایجاد"),
                ),
                (
                    "user",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="worktable_filters",
                        to=settings.AUTH_USER_MODEL,
                        verbose_name="کاربر",
                    ),
                ),
                (
                    "table",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="saved_filters",
                        to="worktable.tabledefinition",
                        verbose_name="جدول",
                    ),
                ),
            ],
            options={
                "verbose_name": "فیلتر ذخیره شده",
                "verbose_name_plural": "فیلترهای ذخیره شده",
                "db_table": "worktable_saved_filter",
                "ordering": ["order", "name"],
            },
        ),
        migrations.CreateModel(
            name="CustomView",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                ("name", models.CharField(max_length=255, verbose_name="نام")),
                (
                    "columns",
                    models.JSONField(
                        default=list,
                        help_text="لیست ستون\u200cها با تنظیمات width و visible",
                        verbose_name="ستون\u200cها",
                    ),
                ),
                (
                    "sort",
                    models.JSONField(
                        blank=True, default=list, verbose_name="مرتب\u200cسازی"
                    ),
                ),
                (
                    "filters",
                    models.JSONField(blank=True, default=dict, verbose_name="فیلترها"),
                ),
                (
                    "is_default",
                    models.BooleanField(default=False, verbose_name="پیش\u200cفرض"),
                ),
                ("is_shared", models.BooleanField(default=False, verbose_name="عمومی")),
                ("order", models.PositiveIntegerField(default=0, verbose_name="ترتیب")),
                (
                    "created_at",
                    models.DateTimeField(auto_now_add=True, verbose_name="تاریخ ایجاد"),
                ),
                (
                    "user",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="worktable_views",
                        to=settings.AUTH_USER_MODEL,
                        verbose_name="کاربر",
                    ),
                ),
                (
                    "table",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="custom_views",
                        to="worktable.tabledefinition",
                        verbose_name="جدول",
                    ),
                ),
            ],
            options={
                "verbose_name": "نمایش سفارشی",
                "verbose_name_plural": "نمایش\u200cهای سفارشی",
                "db_table": "worktable_custom_view",
                "ordering": ["order", "name"],
            },
        ),
        migrations.CreateModel(
            name="TableColumn",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                (
                    "slug",
                    models.SlugField(
                        help_text="شناسه فیلد در داده",
                        max_length=100,
                        verbose_name="شناسه",
                    ),
                ),
                (
                    "name",
                    models.CharField(
                        help_text="نام نمایشی ستون", max_length=255, verbose_name="نام"
                    ),
                ),
                (
                    "field_type",
                    models.CharField(
                        choices=[
                            ("text", "متن"),
                            ("textarea", "متن چندخطی"),
                            ("number", "عدد صحیح"),
                            ("decimal", "عدد اعشاری"),
                            ("date", "تاریخ"),
                            ("datetime", "تاریخ و زمان"),
                            ("boolean", "بله/خیر"),
                            ("select", "انتخاب از لیست"),
                            ("multiselect", "انتخاب چندگانه"),
                            ("relation", "ارتباط"),
                            ("file", "فایل"),
                            ("image", "تصویر"),
                            ("email", "ایمیل"),
                            ("url", "آدرس وب"),
                            ("phone", "تلفن"),
                            ("json", "داده JSON"),
                            ("computed", "محاسباتی"),
                        ],
                        default="text",
                        max_length=50,
                        verbose_name="نوع فیلد",
                    ),
                ),
                (
                    "config",
                    models.JSONField(
                        blank=True,
                        default=dict,
                        help_text="تنظیمات خاص نوع فیلد",
                        verbose_name="تنظیمات",
                    ),
                ),
                (
                    "validation",
                    models.JSONField(
                        blank=True,
                        default=dict,
                        help_text="قوانین اعتبارسنجی",
                        verbose_name="اعتبارسنجی",
                    ),
                ),
                (
                    "is_required",
                    models.BooleanField(default=False, verbose_name="الزامی"),
                ),
                ("is_unique", models.BooleanField(default=False, verbose_name="یکتا")),
                (
                    "is_sortable",
                    models.BooleanField(
                        default=True, verbose_name="قابل مرتب\u200cسازی"
                    ),
                ),
                (
                    "is_filterable",
                    models.BooleanField(default=True, verbose_name="قابل فیلتر"),
                ),
                (
                    "is_searchable",
                    models.BooleanField(default=False, verbose_name="قابل جستجو"),
                ),
                (
                    "is_visible",
                    models.BooleanField(default=True, verbose_name="نمایش در لیست"),
                ),
                (
                    "default_value",
                    models.TextField(
                        blank=True, null=True, verbose_name="مقدار پیش\u200cفرض"
                    ),
                ),
                (
                    "related_display_field",
                    models.CharField(
                        blank=True,
                        help_text="فیلدی که در relation نمایش داده می\u200cشود",
                        max_length=100,
                        null=True,
                        verbose_name="فیلد نمایش",
                    ),
                ),
                (
                    "visible_to_roles",
                    models.JSONField(
                        blank=True,
                        default=list,
                        help_text="خالی = همه می\u200cبینند",
                        verbose_name="نمایش برای نقش\u200cها",
                    ),
                ),
                (
                    "editable_by_roles",
                    models.JSONField(
                        blank=True,
                        default=list,
                        help_text="خالی = همه می\u200cتوانند ویرایش کنند",
                        verbose_name="ویرایش توسط نقش\u200cها",
                    ),
                ),
                ("order", 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="تاریخ بروزرسانی"),
                ),
                (
                    "related_table",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="referencing_columns",
                        to="worktable.tabledefinition",
                        verbose_name="جدول مرتبط",
                    ),
                ),
                (
                    "table",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="columns",
                        to="worktable.tabledefinition",
                        verbose_name="جدول",
                    ),
                ),
            ],
            options={
                "verbose_name": "ستون جدول",
                "verbose_name_plural": "ستون\u200cهای جدول",
                "db_table": "worktable_table_column",
                "ordering": ["order", "name"],
                "unique_together": {("table", "slug")},
            },
        ),
        migrations.CreateModel(
            name="RecordAuditLog",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                (
                    "record_id",
                    models.UUIDField(
                        db_index=True,
                        help_text="نگهداری حتی بعد از حذف رکورد",
                        verbose_name="شناسه رکورد",
                    ),
                ),
                (
                    "action",
                    models.CharField(
                        choices=[
                            ("create", "ایجاد"),
                            ("update", "ویرایش"),
                            ("delete", "حذف"),
                            ("restore", "بازیابی"),
                            ("bulk_create", "ایجاد دسته\u200cای"),
                            ("bulk_update", "ویرایش دسته\u200cای"),
                            ("bulk_delete", "حذف دسته\u200cای"),
                            ("status_change", "تغییر وضعیت"),
                            ("export", "خروجی"),
                            ("import", "ورودی"),
                        ],
                        max_length=50,
                        verbose_name="عملیات",
                    ),
                ),
                (
                    "changes",
                    models.JSONField(
                        default=dict,
                        help_text="فرمت: {field: {old, new}}",
                        verbose_name="تغییرات",
                    ),
                ),
                (
                    "metadata",
                    models.JSONField(blank=True, default=dict, verbose_name="متادیتا"),
                ),
                (
                    "ip_address",
                    models.GenericIPAddressField(
                        blank=True, null=True, verbose_name="آدرس IP"
                    ),
                ),
                (
                    "user_agent",
                    models.TextField(blank=True, null=True, verbose_name="User Agent"),
                ),
                (
                    "created_at",
                    models.DateTimeField(
                        auto_now_add=True, db_index=True, verbose_name="تاریخ"
                    ),
                ),
                (
                    "user",
                    models.ForeignKey(
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="worktable_audit_logs",
                        to=settings.AUTH_USER_MODEL,
                        verbose_name="کاربر",
                    ),
                ),
                (
                    "table",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="audit_logs",
                        to="worktable.tabledefinition",
                        verbose_name="جدول",
                    ),
                ),
            ],
            options={
                "verbose_name": "لاگ تغییرات",
                "verbose_name_plural": "لاگ\u200cهای تغییرات",
                "db_table": "worktable_record_audit_log",
                "ordering": ["-created_at"],
                "indexes": [
                    models.Index(
                        fields=["table", "record_id"],
                        name="worktable_r_table_i_c01eca_idx",
                    ),
                    models.Index(
                        fields=["user"], name="worktable_r_user_id_5f79d1_idx"
                    ),
                ],
            },
        ),
        migrations.CreateModel(
            name="TableRecord",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                ("data", models.JSONField(default=dict, verbose_name="داده\u200cها")),
                (
                    "status",
                    models.CharField(
                        choices=[
                            ("draft", "پیش\u200cنویس"),
                            ("pending", "در انتظار تأیید"),
                            ("approved", "تأیید شده"),
                            ("rejected", "رد شده"),
                            ("archived", "بایگانی شده"),
                        ],
                        default="draft",
                        max_length=50,
                        verbose_name="وضعیت",
                    ),
                ),
                (
                    "workflow_state",
                    models.JSONField(
                        blank=True, null=True, verbose_name="وضعیت workflow"
                    ),
                ),
                (
                    "version",
                    models.PositiveIntegerField(
                        default=1,
                        help_text="برای optimistic locking",
                        verbose_name="نسخه",
                    ),
                ),
                (
                    "is_deleted",
                    models.BooleanField(
                        db_index=True, default=False, verbose_name="حذف شده"
                    ),
                ),
                (
                    "deleted_at",
                    models.DateTimeField(
                        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="تاریخ بروزرسانی"),
                ),
                (
                    "owner",
                    models.ForeignKey(
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="worktable_records",
                        to=settings.AUTH_USER_MODEL,
                        verbose_name="ایجادکننده",
                    ),
                ),
                (
                    "table",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="records",
                        to="worktable.tabledefinition",
                        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": "رکوردها",
                "db_table": "worktable_table_record",
                "ordering": ["-created_at"],
                "indexes": [
                    models.Index(
                        fields=["table", "is_deleted"],
                        name="worktable_t_table_i_0ca501_idx",
                    ),
                    models.Index(
                        fields=["owner"], name="worktable_t_owner_i_b98090_idx"
                    ),
                    models.Index(
                        fields=["status"], name="worktable_t_status_d5b2ce_idx"
                    ),
                    models.Index(
                        fields=["created_at"], name="worktable_t_created_acb514_idx"
                    ),
                ],
            },
        ),
    ]
