"""
ContractRenewal — Domain Entity.

تمدید قرارداد.
"""
from dataclasses import dataclass
from datetime import date
from decimal import Decimal
from typing import Optional
from uuid import UUID

from shared.base_classes.entity import TenantEntity


class RenewalStatus:
    """وضعیت تمدید."""
    PENDING = "PENDING"
    APPROVED = "APPROVED"
    REJECTED = "REJECTED"
    AUTO_RENEWED = "AUTO_RENEWED"
    CANCELLED = "CANCELLED"


@dataclass
class ContractRenewal(TenantEntity):
    """
    تمدید قرارداد.

    Rules:
    - تنها قراردادهای فعال یا منقضی‌شده قابل تمدید هستند
    - تعداد تمدید نباید از حداکثر مجاز بیشتر شود
    """

    contract_id: Optional[UUID] = None
    renewal_number: int = 0
    status: str = RenewalStatus.PENDING

    # Period
    old_start_date: Optional[date] = None
    old_end_date: Optional[date] = None
    new_start_date: Optional[date] = None
    new_end_date: Optional[date] = None

    # Value
    old_value: Optional[Decimal] = None
    new_value: Optional[Decimal] = None
    value_change_percent: Decimal = Decimal("0")

    # Approval
    approved_by: Optional[UUID] = None
    approved_at: Optional[date] = None
    is_auto: bool = False

    notes: str = ""
