"""
CLM Public Queries - Module Contract.

کوئری‌های عمومی ماژول CLM که سایر ماژول‌ها می‌توانند فراخوانی کنند.
"""
from dataclasses import dataclass
from datetime import date
from typing import Optional
from uuid import UUID


@dataclass
class GetContract:
    """دریافت اطلاعات قرارداد."""
    tenant_id: UUID
    contract_id: UUID


@dataclass
class GetContractByNumber:
    """دریافت قرارداد با شماره."""
    tenant_id: UUID
    contract_number: str


@dataclass
class ListContracts:
    """لیست قراردادها."""
    tenant_id: UUID
    category: Optional[str] = None
    contract_type: Optional[str] = None
    status: Optional[str] = None
    project_id: Optional[UUID] = None
    org_unit_id: Optional[UUID] = None
    search_query: Optional[str] = None
    page: int = 1
    page_size: int = 20


@dataclass
class ListContractsByProject:
    """لیست قراردادهای یک پروژه."""
    tenant_id: UUID
    project_id: UUID
    status: Optional[str] = None


@dataclass
class ListContractsByParty:
    """لیست قراردادهای یک طرف."""
    tenant_id: UUID
    business_partner_id: UUID
    status: Optional[str] = None


@dataclass
class ListExpiringContracts:
    """لیست قراردادهای رو به انقضا."""
    tenant_id: UUID
    days_ahead: int = 30


@dataclass
class GetContractMilestones:
    """دریافت مراحل قرارداد."""
    tenant_id: UUID
    contract_id: UUID
    status: Optional[str] = None


@dataclass
class GetContractAmendments:
    """دریافت الحاقیه‌های قرارداد."""
    tenant_id: UUID
    contract_id: UUID


@dataclass
class GetContractFinancialSummary:
    """خلاصه مالی قرارداد."""
    tenant_id: UUID
    contract_id: UUID


@dataclass
class GetContractDashboard:
    """داشبورد قراردادها."""
    tenant_id: UUID
    category: Optional[str] = None
