"""
CLM Public Types - Module Contract.

تایپ‌های عمومی ماژول CLM برای استفاده توسط سایر ماژول‌ها.
"""
from dataclasses import dataclass
from datetime import date
from decimal import Decimal
from typing import Optional, List
from uuid import UUID


@dataclass(frozen=True)
class ContractSummary:
    """خلاصه اطلاعات قرارداد."""
    id: UUID
    contract_number: str
    title: str
    category: str
    contract_type: str
    status: str
    total_value: Optional[Decimal] = None
    start_date: Optional[date] = None
    end_date: Optional[date] = None


@dataclass(frozen=True)
class ContractPartySummary:
    """خلاصه اطلاعات طرف قرارداد."""
    id: UUID
    contract_id: UUID
    party_role: str
    business_partner_id: Optional[UUID] = None
    signer_name: str = ""
    is_primary: bool = False


@dataclass(frozen=True)
class ContractMilestoneSummary:
    """خلاصه اطلاعات مرحله قرارداد."""
    id: UUID
    contract_id: UUID
    title: str
    milestone_type: str
    status: str
    planned_date: Optional[date] = None
    actual_date: Optional[date] = None
    amount: Optional[Decimal] = None


@dataclass(frozen=True)
class ContractAmendmentSummary:
    """خلاصه اطلاعات الحاقیه."""
    id: UUID
    contract_id: UUID
    amendment_number: int
    amendment_type: str
    status: str
    effective_date: Optional[date] = None


@dataclass(frozen=True)
class ContractTemplateSummary:
    """خلاصه اطلاعات قالب."""
    id: UUID
    name: str
    category: str
    contract_type: str
    is_active: bool = True


# ═══════════════════════════════════════════════════
# Enums (publicly available)
# ═══════════════════════════════════════════════════

class ContractCategory:
    COMMERCIAL = "COMMERCIAL"
    PROJECT = "PROJECT"
    EMPLOYMENT = "EMPLOYMENT"
    LEASE = "LEASE"

    CHOICES = [
        (COMMERCIAL, "تجاری"),
        (PROJECT, "پروژه‌ای"),
        (EMPLOYMENT, "استخدامی"),
        (LEASE, "اجاره"),
    ]


class ContractStatus:
    DRAFT = "DRAFT"
    PENDING_APPROVAL = "PENDING_APPROVAL"
    APPROVED = "APPROVED"
    ACTIVE = "ACTIVE"
    SUSPENDED = "SUSPENDED"
    COMPLETED = "COMPLETED"
    TERMINATED = "TERMINATED"
    EXPIRED = "EXPIRED"
    CANCELLED = "CANCELLED"

    CHOICES = [
        (DRAFT, "پیش‌نویس"),
        (PENDING_APPROVAL, "در انتظار تأیید"),
        (APPROVED, "تأیید شده"),
        (ACTIVE, "فعال"),
        (SUSPENDED, "تعلیق شده"),
        (COMPLETED, "اتمام"),
        (TERMINATED, "فسخ شده"),
        (EXPIRED, "منقضی"),
        (CANCELLED, "لغو شده"),
    ]


class ContractType:
    COMMERCIAL_PURCHASE = "COMMERCIAL_PURCHASE"
    COMMERCIAL_SALE = "COMMERCIAL_SALE"
    COMMERCIAL_SERVICE = "COMMERCIAL_SERVICE"
    COMMERCIAL_PARTNERSHIP = "COMMERCIAL_PARTNERSHIP"
    PROJECT_EPC = "PROJECT_EPC"
    PROJECT_CONTRACTOR = "PROJECT_CONTRACTOR"
    PROJECT_CONSULTANCY = "PROJECT_CONSULTANCY"
    EMPLOYMENT_PERMANENT = "EMPLOYMENT_PERMANENT"
    EMPLOYMENT_TEMPORARY = "EMPLOYMENT_TEMPORARY"
    EMPLOYMENT_CONSULTANCY = "EMPLOYMENT_CONSULTANCY"
    LEASE_PROPERTY = "LEASE_PROPERTY"
    LEASE_EQUIPMENT = "LEASE_EQUIPMENT"
    LEASE_VEHICLE = "LEASE_VEHICLE"

    CHOICES = [
        (COMMERCIAL_PURCHASE, "خرید"),
        (COMMERCIAL_SALE, "فروش"),
        (COMMERCIAL_SERVICE, "خدمات"),
        (COMMERCIAL_PARTNERSHIP, "مشارکت"),
        (PROJECT_EPC, "EPC"),
        (PROJECT_CONTRACTOR, "پیمانکاری"),
        (PROJECT_CONSULTANCY, "مشاوره پروژه"),
        (EMPLOYMENT_PERMANENT, "استخدام دائم"),
        (EMPLOYMENT_TEMPORARY, "استخدام موقت"),
        (EMPLOYMENT_CONSULTANCY, "مشاوره"),
        (LEASE_PROPERTY, "اجاره ملک"),
        (LEASE_EQUIPMENT, "اجاره تجهیزات"),
        (LEASE_VEHICLE, "اجاره خودرو"),
    ]
