"""
CLM ORM Models — Infrastructure Layer.

مدل‌های Django ORM ماژول مدیریت قراردادها.
تمام جداول با پیشوند clm_ هستند.
verbose_nameها به فارسی.
"""
import uuid

from django.conf import settings
from django.db import models
from django.utils.translation import gettext_lazy as _
from apps.core.tenant.models import TenantAwareModel


# ═══════════════════════════════════════════════════
# 1️⃣ Contract Template
# ═══════════════════════════════════════════════════

class ContractTemplateModel(TenantAwareModel):
    """مدل ORM — قالب قرارداد."""

    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    name = models.CharField(_("نام"), max_length=255)
    name_en = models.CharField(_("نام انگلیسی"), max_length=255, blank=True)
    description = models.TextField(_("توضیحات"), blank=True)

    category = models.CharField(_("دسته"), max_length=30, choices=[
        ("COMMERCIAL", _("تجاری")),
        ("PROJECT", _("پروژه‌ای")),
        ("EMPLOYMENT", _("استخدامی")),
        ("LEASE", _("اجاره/لیزینگ")),
    ], default="COMMERCIAL")

    contract_type = models.CharField(_("نوع قرارداد"), max_length=30, choices=[
        ("PURCHASE", _("خرید")), ("SALE", _("فروش")),
        ("SERVICE", _("خدمات")), ("PARTNERSHIP", _("مشارکت")),
        ("DISTRIBUTION", _("توزیع")), ("AGENCY", _("نمایندگی")),
        ("EPC", _("EPC")), ("CONTRACTOR", _("پیمانکاری")),
        ("SUBCONTRACTOR", _("پیمانکار فرعی")), ("CONSULTING", _("مشاوره")),
        ("PERMANENT", _("دائم")), ("TEMPORARY", _("موقت")),
        ("CONSULTANCY", _("حق‌المشاوره")), ("INTERNSHIP", _("کارآموزی")),
        ("PROPERTY_LEASE", _("اجاره ملک")), ("EQUIPMENT_LEASE", _("اجاره تجهیزات")),
        ("VEHICLE_LEASE", _("اجاره خودرو")),
    ], blank=True)

    default_clauses = models.JSONField(_("بندهای پیش‌فرض"), default=list, blank=True)
    default_milestones = models.JSONField(_("مراحل پیش‌فرض"), default=list, blank=True)
    default_payment_terms_days = models.IntegerField(_("مهلت پرداخت پیش‌فرض (روز)"), default=30)
    default_advance_payment_percent = models.DecimalField(
        _("پیش‌پرداخت پیش‌فرض (٪)"), max_digits=5, decimal_places=2, default=0
    )
    default_retention_percent = models.DecimalField(
        _("حسن انجام کار پیش‌فرض (٪)"), max_digits=5, decimal_places=2, default=0
    )
    default_penalty_rate_per_day = models.DecimalField(
        _("نرخ جریمه پیش‌فرض (روزانه)"), max_digits=15, decimal_places=2, default=0
    )
    numbering_prefix = models.CharField(_("پیشوند شماره‌گذاری"), max_length=10, default="CNT")
    numbering_pattern = models.CharField(
        _("الگوی شماره‌گذاری"), max_length=50, default="{prefix}-{year}-{seq:04d}"
    )

    is_active = models.BooleanField(_("فعال"), default=True, db_index=True)
    is_default = models.BooleanField(_("پیش‌فرض"), default=False)
    usage_count = models.IntegerField(_("دفعات استفاده"), default=0)
    metadata = models.JSONField(_("متادیتا"), default=dict, blank=True)

    created_at = models.DateTimeField(_("تاریخ ایجاد"), auto_now_add=True)
    updated_at = models.DateTimeField(_("تاریخ بروزرسانی"), auto_now=True)
    created_by = models.UUIDField(_("ایجاد توسط"), null=True, blank=True)
    updated_by = models.UUIDField(_("بروزرسانی توسط"), null=True, blank=True)

    class Meta:
        app_label = "clm"
        db_table = "clm_contract_template"
        verbose_name = _("قالب قرارداد")
        verbose_name_plural = _("قالب‌های قرارداد")
        unique_together = [["tenant", "name"]]
        indexes = [
            models.Index(fields=["tenant", "is_active"]),
            models.Index(fields=["tenant", "category"]),
        ]

    def __str__(self):
        return self.name


# ═══════════════════════════════════════════════════
# 2️⃣ Contract (Aggregate Root)
# ═══════════════════════════════════════════════════

class ContractModel(TenantAwareModel):
    """مدل ORM — قرارداد (Aggregate Root)."""

    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    contract_number = models.CharField(_("شماره قرارداد"), max_length=50, db_index=True)
    title = models.CharField(_("عنوان"), max_length=500)
    description = models.TextField(_("شرح"), blank=True)

    category = models.CharField(_("دسته"), max_length=30, choices=[
        ("COMMERCIAL", _("تجاری")),
        ("PROJECT", _("پروژه‌ای")),
        ("EMPLOYMENT", _("استخدامی")),
        ("LEASE", _("اجاره/لیزینگ")),
    ], default="COMMERCIAL", db_index=True)

    contract_type = models.CharField(_("نوع قرارداد"), max_length=30, choices=[
        ("PURCHASE", _("خرید")), ("SALE", _("فروش")),
        ("SERVICE", _("خدمات")), ("PARTNERSHIP", _("مشارکت")),
        ("DISTRIBUTION", _("توزیع")), ("AGENCY", _("نمایندگی")),
        ("EPC", _("EPC")), ("CONTRACTOR", _("پیمانکاری")),
        ("SUBCONTRACTOR", _("پیمانکار فرعی")), ("CONSULTING", _("مشاوره")),
        ("PERMANENT", _("دائم")), ("TEMPORARY", _("موقت")),
        ("CONSULTANCY", _("حق‌المشاوره")), ("INTERNSHIP", _("کارآموزی")),
        ("PROPERTY_LEASE", _("اجاره ملک")), ("EQUIPMENT_LEASE", _("اجاره تجهیزات")),
        ("VEHICLE_LEASE", _("اجاره خودرو")),
    ], default="SERVICE")

    status = models.CharField(_("وضعیت"), max_length=30, choices=[
        ("DRAFT", _("پیش‌نویس")),
        ("PENDING_APPROVAL", _("در انتظار تأیید")),
        ("APPROVED", _("تأیید شده")),
        ("ACTIVE", _("فعال")),
        ("SUSPENDED", _("تعلیق")),
        ("COMPLETED", _("اتمام")),
        ("TERMINATED", _("خاتمه")),
        ("EXPIRED", _("منقضی")),
        ("CANCELLED", _("لغو")),
    ], default="DRAFT", db_index=True)

    priority = models.CharField(_("اولویت"), max_length=20, choices=[
        ("LOW", _("کم")), ("NORMAL", _("عادی")),
        ("HIGH", _("زیاد")), ("CRITICAL", _("بحرانی")),
    ], default="NORMAL")

    # Dates
    start_date = models.DateField(_("تاریخ شروع"), null=True, blank=True)
    end_date = models.DateField(_("تاریخ پایان"), null=True, blank=True)
    signing_date = models.DateField(_("تاریخ امضا"), null=True, blank=True)
    effective_date = models.DateField(_("تاریخ اجرا"), null=True, blank=True)
    expiry_date = models.DateField(_("تاریخ انقضا"), null=True, blank=True, db_index=True)

    # Financial
    total_value = models.DecimalField(_("مبلغ کل"), max_digits=20, decimal_places=2, default=0)
    currency_id = models.UUIDField(_("واحد پول"), null=True, blank=True)
    payment_terms_days = models.IntegerField(_("مهلت پرداخت (روز)"), default=30)
    payment_terms_description = models.TextField(_("شرایط پرداخت"), blank=True)
    advance_payment_percent = models.DecimalField(
        _("پیش‌پرداخت (٪)"), max_digits=5, decimal_places=2, default=0
    )
    retention_percent = models.DecimalField(
        _("حسن انجام کار (٪)"), max_digits=5, decimal_places=2, default=0
    )
    penalty_rate_per_day = models.DecimalField(
        _("نرخ جریمه روزانه"), max_digits=15, decimal_places=2, default=0
    )

    # Guarantee
    guarantee_amount = models.DecimalField(
        _("مبلغ ضمانتنامه"), max_digits=20, decimal_places=2, default=0
    )
    guarantee_type = models.CharField(_("نوع ضمانتنامه"), max_length=30, choices=[
        ("BANK_GUARANTEE", _("ضمانتنامه بانکی")),
        ("PROMISSORY_NOTE", _("سفته")),
        ("CHECK", _("چک")),
        ("CASH", _("نقد")),
        ("", _("ندارد")),
    ], blank=True, default="")
    guarantee_expiry_date = models.DateField(_("تاریخ انقضای ضمانتنامه"), null=True, blank=True)
    performance_bond_amount = models.DecimalField(
        _("مبلغ حسن انجام تعهدات"), max_digits=20, decimal_places=2, default=0
    )
    performance_bond_expiry_date = models.DateField(
        _("تاریخ انقضای حسن انجام تعهدات"), null=True, blank=True
    )

    # Renewal
    auto_renew = models.BooleanField(_("تمدید خودکار"), default=False)
    renewal_period_days = models.IntegerField(_("دوره تمدید (روز)"), default=365)
    renewal_notice_days = models.IntegerField(_("اطلاع‌رسانی تمدید (روز قبل)"), default=30)
    max_renewals = models.IntegerField(_("حداکثر تمدید"), default=0)
    renewals_count = models.IntegerField(_("تعداد تمدیدها"), default=0)

    # Relations (UUID only — no cross-module FK)
    parent_contract = models.ForeignKey(
        "self", on_delete=models.SET_NULL, null=True, blank=True,
        related_name="sub_contracts", verbose_name=_("قرارداد مادر"),
    )
    template = models.ForeignKey(
        ContractTemplateModel, on_delete=models.SET_NULL, null=True, blank=True,
        related_name="contracts", verbose_name=_("قالب"),
    )
    project_id = models.UUIDField(_("پروژه"), null=True, blank=True, db_index=True)
    org_unit_id = models.UUIDField(_("واحد سازمانی"), null=True, blank=True)
    legal_entity_id = models.UUIDField(_("شخصیت حقوقی"), null=True, blank=True)
    responsible_person_id = models.UUIDField(_("مسئول"), null=True, blank=True)
    employee_id = models.UUIDField(_("کارمند (قراردادهای استخدامی)"), null=True, blank=True)

    # Metadata
    reference_number = models.CharField(_("شماره مرجع"), max_length=100, blank=True)
    tags = models.CharField(_("برچسب‌ها"), max_length=500, blank=True)
    notes = models.TextField(_("یادداشت"), blank=True)
    metadata = models.JSONField(_("متادیتا"), default=dict, blank=True)
    is_active = models.BooleanField(_("فعال"), default=True, db_index=True)
    is_confidential = models.BooleanField(_("محرمانه"), default=False)

    created_at = models.DateTimeField(_("تاریخ ایجاد"), auto_now_add=True)
    updated_at = models.DateTimeField(_("تاریخ بروزرسانی"), auto_now=True)
    created_by = models.UUIDField(_("ایجاد توسط"), null=True, blank=True)
    updated_by = models.UUIDField(_("بروزرسانی توسط"), null=True, blank=True)

    class Meta:
        app_label = "clm"
        db_table = "clm_contract"
        verbose_name = _("قرارداد")
        verbose_name_plural = _("قراردادها")
        unique_together = [["tenant", "contract_number"]]
        ordering = ["-created_at"]
        indexes = [
            models.Index(fields=["tenant", "status"]),
            models.Index(fields=["tenant", "category"]),
            models.Index(fields=["tenant", "contract_type"]),
            models.Index(fields=["tenant", "is_active"]),
            models.Index(fields=["tenant", "expiry_date"]),
            models.Index(fields=["tenant", "project_id"]),
            models.Index(fields=["tenant", "legal_entity_id"]),
            models.Index(fields=["tenant", "employee_id"]),
        ]

    def __str__(self):
        return f"{self.contract_number} — {self.title}"


# ═══════════════════════════════════════════════════
# 3️⃣ Contract Party
# ═══════════════════════════════════════════════════

class ContractPartyModel(TenantAwareModel):
    """مدل ORM — طرف قرارداد."""

    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    contract = models.ForeignKey(
        ContractModel, on_delete=models.CASCADE,
        related_name="parties", verbose_name=_("قرارداد"),
    )
    party_role = models.CharField(_("نقش"), max_length=30, choices=[
        ("FIRST_PARTY", _("طرف اول (کارفرما)")),
        ("SECOND_PARTY", _("طرف دوم")),
        ("GUARANTOR", _("ضامن")),
        ("WITNESS", _("شاهد")),
        ("CONSULTANT", _("مشاور")),
        ("AGENT", _("نماینده")),
        ("BENEFICIARY", _("ذی‌نفع")),
    ], default="SECOND_PARTY")

    business_partner_id = models.UUIDField(_("طرف تجاری"), null=True, blank=True, db_index=True)
    legal_entity_id = models.UUIDField(_("شخصیت حقوقی"), null=True, blank=True)

    signer_name = models.CharField(_("نام امضاکننده"), max_length=255, blank=True)
    signer_title = models.CharField(_("سمت امضاکننده"), max_length=255, blank=True)
    signer_national_code = models.CharField(_("کد ملی امضاکننده"), max_length=20, blank=True)
    signing_authority = models.CharField(_("مأخذ اختیار امضا"), max_length=255, blank=True)

    contact_name = models.CharField(_("نام رابط"), max_length=255, blank=True)
    contact_phone = models.CharField(_("تلفن رابط"), max_length=50, blank=True)
    contact_email = models.EmailField(_("ایمیل رابط"), blank=True)

    share_percent = models.IntegerField(_("سهم (٪)"), default=100)
    is_primary = models.BooleanField(_("اصلی"), default=False)
    is_lead = models.BooleanField(_("سرکنسرسیوم"), default=False)
    notes = models.TextField(_("یادداشت"), blank=True)
    order = models.IntegerField(_("ترتیب"), default=0)

    created_at = models.DateTimeField(_("تاریخ ایجاد"), auto_now_add=True)
    updated_at = models.DateTimeField(_("تاریخ بروزرسانی"), auto_now=True)

    class Meta:
        app_label = "clm"
        db_table = "clm_contract_party"
        verbose_name = _("طرف قرارداد")
        verbose_name_plural = _("طرف‌های قرارداد")
        ordering = ["order"]
        indexes = [
            models.Index(fields=["contract", "party_role"]),
            models.Index(fields=["business_partner_id"]),
        ]

    def __str__(self):
        return f"{self.get_party_role_display()} — {self.signer_name or self.contact_name}"


# ═══════════════════════════════════════════════════
# 4️⃣ Contract Clause
# ═══════════════════════════════════════════════════

class ContractClauseModel(TenantAwareModel):
    """مدل ORM — بند قرارداد."""

    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    contract = models.ForeignKey(
        ContractModel, on_delete=models.CASCADE,
        related_name="clauses", verbose_name=_("قرارداد"),
    )
    clause_number = models.CharField(_("شماره بند"), max_length=20)
    title = models.CharField(_("عنوان"), max_length=500)
    content = models.TextField(_("متن بند"))

    clause_type = models.CharField(_("نوع بند"), max_length=30, choices=[
        ("GENERAL", _("عمومی")),
        ("FINANCIAL", _("مالی")),
        ("PENALTY", _("جریمه")),
        ("TERMINATION", _("فسخ")),
        ("CONFIDENTIALITY", _("محرمانگی")),
        ("FORCE_MAJEURE", _("فورس ماژور")),
        ("DISPUTE_RESOLUTION", _("حل اختلاف")),
        ("INSURANCE", _("بیمه")),
        ("WARRANTY", _("ضمانت")),
        ("DELIVERY", _("تحویل")),
        ("SCOPE", _("محدوده کار")),
        ("CUSTOM", _("سفارشی")),
    ], default="GENERAL")

    is_mandatory = models.BooleanField(_("اجباری"), default=False)
    is_negotiable = models.BooleanField(_("قابل مذاکره"), default=True)
    parent_clause = models.ForeignKey(
        "self", on_delete=models.CASCADE, null=True, blank=True,
        related_name="sub_clauses", verbose_name=_("بند مادر"),
    )
    order = models.IntegerField(_("ترتیب"), default=0)
    notes = models.TextField(_("یادداشت"), blank=True)

    created_at = models.DateTimeField(_("تاریخ ایجاد"), auto_now_add=True)
    updated_at = models.DateTimeField(_("تاریخ بروزرسانی"), auto_now=True)

    class Meta:
        app_label = "clm"
        db_table = "clm_contract_clause"
        verbose_name = _("بند قرارداد")
        verbose_name_plural = _("بندهای قرارداد")
        unique_together = [["contract", "clause_number"]]
        ordering = ["order"]

    def __str__(self):
        return f"بند {self.clause_number}: {self.title}"


# ═══════════════════════════════════════════════════
# 5️⃣ Contract Milestone
# ═══════════════════════════════════════════════════

class ContractMilestoneModel(TenantAwareModel):
    """مدل ORM — مرحله قرارداد."""

    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    contract = models.ForeignKey(
        ContractModel, on_delete=models.CASCADE,
        related_name="milestones", verbose_name=_("قرارداد"),
    )
    title = models.CharField(_("عنوان"), max_length=500)
    description = models.TextField(_("شرح"), blank=True)

    milestone_type = models.CharField(_("نوع"), max_length=30, choices=[
        ("PAYMENT", _("پرداخت")),
        ("DELIVERY", _("تحویل")),
        ("PHASE_COMPLETION", _("اتمام فاز")),
        ("INSPECTION", _("بازرسی")),
        ("ACCEPTANCE", _("تحویل‌گیری")),
        ("CUSTOM", _("سفارشی")),
    ], default="PAYMENT")

    status = models.CharField(_("وضعیت"), max_length=20, choices=[
        ("PENDING", _("در انتظار")),
        ("IN_PROGRESS", _("در حال انجام")),
        ("COMPLETED", _("تکمیل‌شده")),
        ("OVERDUE", _("سررسید گذشته")),
        ("CANCELLED", _("لغو")),
        ("SKIPPED", _("رد شده")),
    ], default="PENDING")

    planned_date = models.DateField(_("تاریخ برنامه"), null=True, blank=True)
    actual_date = models.DateField(_("تاریخ واقعی"), null=True, blank=True)
    due_date = models.DateField(_("سررسید"), null=True, blank=True, db_index=True)

    amount = models.DecimalField(_("مبلغ"), max_digits=20, decimal_places=2, default=0)
    currency_id = models.UUIDField(_("واحد پول"), null=True, blank=True)
    invoice_number = models.CharField(_("شماره فاکتور"), max_length=50, blank=True)
    payment_status = models.CharField(_("وضعیت پرداخت"), max_length=20, choices=[
        ("PENDING", _("در انتظار")),
        ("PAID", _("پرداخت‌شده")),
        ("PARTIAL", _("پرداخت بخشی")),
        ("OVERDUE", _("معوق")),
        ("", _("ندارد")),
    ], blank=True, default="")

    deliverable_description = models.TextField(_("شرح تحویلی"), blank=True)
    acceptance_criteria = models.TextField(_("معیار پذیرش"), blank=True)
    accepted_by = models.UUIDField(_("تأیید توسط"), null=True, blank=True)
    accepted_at = models.DateField(_("تاریخ تأیید"), null=True, blank=True)

    has_penalty = models.BooleanField(_("جریمه تأخیر"), default=False)
    penalty_amount_per_day = models.DecimalField(
        _("جریمه روزانه"), max_digits=15, decimal_places=2, default=0
    )

    order = models.IntegerField(_("ترتیب"), default=0)
    notes = models.TextField(_("یادداشت"), blank=True)

    created_at = models.DateTimeField(_("تاریخ ایجاد"), auto_now_add=True)
    updated_at = models.DateTimeField(_("تاریخ بروزرسانی"), auto_now=True)

    class Meta:
        app_label = "clm"
        db_table = "clm_contract_milestone"
        verbose_name = _("مرحله قرارداد")
        verbose_name_plural = _("مراحل قرارداد")
        ordering = ["order"]
        indexes = [
            models.Index(fields=["contract", "status"]),
            models.Index(fields=["due_date"]),
        ]

    def __str__(self):
        return f"{self.title} ({self.get_status_display()})"


# ═══════════════════════════════════════════════════
# 6️⃣ Contract Amendment
# ═══════════════════════════════════════════════════

class ContractAmendmentModel(TenantAwareModel):
    """مدل ORM — الحاقیه قرارداد."""

    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    contract = models.ForeignKey(
        ContractModel, on_delete=models.CASCADE,
        related_name="amendments", verbose_name=_("قرارداد"),
    )
    amendment_number = models.IntegerField(_("شماره الحاقیه"))
    title = models.CharField(_("عنوان"), max_length=500)
    description = models.TextField(_("شرح"), blank=True)
    reason = models.TextField(_("دلیل"), blank=True)

    amendment_type = models.CharField(_("نوع"), max_length=30, choices=[
        ("VALUE_CHANGE", _("تغییر مبلغ")),
        ("DURATION_CHANGE", _("تغییر مدت")),
        ("SCOPE_CHANGE", _("تغییر محدوده")),
        ("PARTY_CHANGE", _("تغییر طرفین")),
        ("CLAUSE_CHANGE", _("تغییر بندها")),
        ("COMBINED", _("ترکیبی")),
        ("OTHER", _("سایر")),
    ], default="OTHER")

    status = models.CharField(_("وضعیت"), max_length=30, choices=[
        ("DRAFT", _("پیش‌نویس")),
        ("PENDING_APPROVAL", _("در انتظار تأیید")),
        ("APPROVED", _("تأیید شده")),
        ("REJECTED", _("رد شده")),
        ("APPLIED", _("اعمال‌شده")),
    ], default="DRAFT")

    effective_date = models.DateField(_("تاریخ اجرا"), null=True, blank=True)

    old_values = models.JSONField(_("مقادیر قبلی"), default=dict, blank=True)
    new_values = models.JSONField(_("مقادیر جدید"), default=dict, blank=True)
    old_total_value = models.DecimalField(
        _("مبلغ قبلی"), max_digits=20, decimal_places=2, null=True, blank=True
    )
    new_total_value = models.DecimalField(
        _("مبلغ جدید"), max_digits=20, decimal_places=2, null=True, blank=True
    )
    old_end_date = models.DateField(_("تاریخ پایان قبلی"), null=True, blank=True)
    new_end_date = models.DateField(_("تاریخ پایان جدید"), null=True, blank=True)

    approved_by = models.UUIDField(_("تأیید توسط"), null=True, blank=True)
    approved_at = models.DateField(_("تاریخ تأیید"), null=True, blank=True)
    rejected_by = models.UUIDField(_("رد توسط"), null=True, blank=True)
    rejected_reason = models.TextField(_("دلیل رد"), blank=True)

    notes = models.TextField(_("یادداشت"), blank=True)

    created_at = models.DateTimeField(_("تاریخ ایجاد"), auto_now_add=True)
    updated_at = models.DateTimeField(_("تاریخ بروزرسانی"), auto_now=True)
    created_by = models.UUIDField(_("ایجاد توسط"), null=True, blank=True)

    class Meta:
        app_label = "clm"
        db_table = "clm_contract_amendment"
        verbose_name = _("الحاقیه قرارداد")
        verbose_name_plural = _("الحاقیه‌های قرارداد")
        unique_together = [["contract", "amendment_number"]]
        ordering = ["amendment_number"]

    def __str__(self):
        return f"الحاقیه {self.amendment_number}: {self.title}"


# ═══════════════════════════════════════════════════
# 7️⃣ Contract Renewal
# ═══════════════════════════════════════════════════

class ContractRenewalModel(TenantAwareModel):
    """مدل ORM — تمدید قرارداد."""

    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    contract = models.ForeignKey(
        ContractModel, on_delete=models.CASCADE,
        related_name="renewals", verbose_name=_("قرارداد"),
    )
    renewal_number = models.IntegerField(_("شماره تمدید"))

    status = models.CharField(_("وضعیت"), max_length=20, choices=[
        ("PENDING", _("در انتظار")),
        ("APPROVED", _("تأیید شده")),
        ("REJECTED", _("رد شده")),
        ("AUTO_RENEWED", _("تمدید خودکار")),
        ("CANCELLED", _("لغو")),
    ], default="PENDING")

    old_start_date = models.DateField(_("شروع قبلی"), null=True, blank=True)
    old_end_date = models.DateField(_("پایان قبلی"), null=True, blank=True)
    new_start_date = models.DateField(_("شروع جدید"), null=True, blank=True)
    new_end_date = models.DateField(_("پایان جدید"), null=True, blank=True)

    old_value = models.DecimalField(
        _("مبلغ قبلی"), max_digits=20, decimal_places=2, null=True, blank=True
    )
    new_value = models.DecimalField(
        _("مبلغ جدید"), max_digits=20, decimal_places=2, null=True, blank=True
    )
    value_change_percent = models.DecimalField(
        _("تغییر مبلغ (٪)"), max_digits=7, decimal_places=2, default=0
    )

    approved_by = models.UUIDField(_("تأیید توسط"), null=True, blank=True)
    approved_at = models.DateField(_("تاریخ تأیید"), null=True, blank=True)
    is_auto = models.BooleanField(_("تمدید خودکار"), default=False)
    notes = models.TextField(_("یادداشت"), blank=True)

    created_at = models.DateTimeField(_("تاریخ ایجاد"), auto_now_add=True)
    updated_at = models.DateTimeField(_("تاریخ بروزرسانی"), auto_now=True)

    class Meta:
        app_label = "clm"
        db_table = "clm_contract_renewal"
        verbose_name = _("تمدید قرارداد")
        verbose_name_plural = _("تمدیدهای قرارداد")
        unique_together = [["contract", "renewal_number"]]
        ordering = ["renewal_number"]

    def __str__(self):
        return f"تمدید {self.renewal_number} — {self.contract.contract_number}"
