"""
HRM Public Queries - Module Contract.

کوئری‌های عمومی ماژول HRM که سایر ماژول‌ها می‌توانند فراخوانی کنند.
"""
from dataclasses import dataclass, field
from datetime import date
from typing import Optional, List
from uuid import UUID


@dataclass
class GetEmployee:
    """دریافت اطلاعات کارمند."""
    tenant_id: UUID
    employee_id: UUID


@dataclass
class GetEmployeeByCode:
    """دریافت کارمند با کد پرسنلی."""
    tenant_id: UUID
    employee_code: str


@dataclass
class ListEmployees:
    """لیست کارمندان."""
    tenant_id: UUID
    org_unit_id: Optional[UUID] = None
    employment_status: Optional[str] = None
    search_query: Optional[str] = None
    page: int = 1
    page_size: int = 20


@dataclass
class GetPosition:
    """دریافت اطلاعات پست."""
    tenant_id: UUID
    position_id: UUID


@dataclass
class ListVacantPositions:
    """لیست پست‌های خالی."""
    tenant_id: UUID
    org_unit_id: Optional[UUID] = None


@dataclass
class GetLeaveBalance:
    """دریافت مانده مرخصی."""
    tenant_id: UUID
    employee_id: UUID
    year: Optional[int] = None
    leave_type: Optional[str] = None


@dataclass
class GetCurrentCompensation:
    """دریافت حقوق فعلی."""
    tenant_id: UUID
    employee_id: UUID


@dataclass
class GetOrgChart:
    """دریافت چارت سازمانی."""
    tenant_id: UUID
    root_org_unit_id: Optional[UUID] = None
    depth: int = 3
