"""
ContractClause — Domain Entity.

بندها و شرایط قرارداد.
"""
from dataclasses import dataclass
from typing import Optional
from uuid import UUID

from shared.base_classes.entity import TenantEntity


class ClauseType:
    """نوع بند قرارداد."""
    GENERAL = "GENERAL"                  # عمومی
    FINANCIAL = "FINANCIAL"              # مالی
    PENALTY = "PENALTY"                  # جریمه
    TERMINATION = "TERMINATION"          # فسخ
    CONFIDENTIALITY = "CONFIDENTIALITY"  # محرمانگی
    FORCE_MAJEURE = "FORCE_MAJEURE"      # فورس ماژور
    DISPUTE_RESOLUTION = "DISPUTE_RESOLUTION"  # حل اختلاف
    INSURANCE = "INSURANCE"              # بیمه
    WARRANTY = "WARRANTY"                # گارانتی/ضمانت
    DELIVERY = "DELIVERY"                # تحویل
    SCOPE = "SCOPE"                      # محدوده کار
    CUSTOM = "CUSTOM"                    # سفارشی


@dataclass
class ContractClause(TenantEntity):
    """
    بند قرارداد.

    Rules:
    - شماره بند باید در هر قرارداد یکتا باشد
    - بندهای اجباری قابل حذف نیستند
    """

    contract_id: Optional[UUID] = None
    clause_number: str = ""
    title: str = ""
    content: str = ""
    clause_type: str = ClauseType.GENERAL
    is_mandatory: bool = False
    is_negotiable: bool = True
    parent_clause_id: Optional[UUID] = None
    order: int = 0
    notes: str = ""
