"""
ContractParty — Domain Entity.

طرف‌های قرارداد.
"""
from dataclasses import dataclass
from datetime import date
from typing import Optional
from uuid import UUID

from shared.base_classes.entity import TenantEntity


class PartyRole:
    """نقش طرف قرارداد."""
    FIRST_PARTY = "FIRST_PARTY"          # طرف اول (کارفرما)
    SECOND_PARTY = "SECOND_PARTY"        # طرف دوم (پیمانکار/فروشنده)
    GUARANTOR = "GUARANTOR"              # ضامن
    WITNESS = "WITNESS"                  # شاهد
    CONSULTANT = "CONSULTANT"            # مشاور
    AGENT = "AGENT"                      # نماینده
    BENEFICIARY = "BENEFICIARY"          # ذی‌نفع


@dataclass
class ContractParty(TenantEntity):
    """
    طرف قرارداد.

    Rules:
    - هر قرارداد باید حداقل دو طرف داشته باشد
    - طرف اول معمولاً سازمان خود (LegalEntity) است
    - business_partner_id ارجاع به BusinessPartner پلتفرم
    """

    contract_id: Optional[UUID] = None
    party_role: str = PartyRole.SECOND_PARTY
    business_partner_id: Optional[UUID] = None
    legal_entity_id: Optional[UUID] = None

    # Signer Info
    signer_name: str = ""
    signer_title: str = ""
    signer_national_code: str = ""
    signing_authority: str = ""

    # Contact for this contract
    contact_name: str = ""
    contact_phone: str = ""
    contact_email: str = ""

    # Share
    share_percent: int = 100
    is_primary: bool = False
    is_lead: bool = False

    notes: str = ""
    order: int = 0
