"""
Inventory Public Queries — Contract v1.

کوئری‌های عمومی ماژول انبار که سایر ماژول‌ها می‌توانند فراخوانی کنند.
"""
from dataclasses import dataclass
from datetime import date
from typing import Optional
from uuid import UUID


@dataclass
class GetItem:
    """دریافت اطلاعات کالا."""
    tenant_id: UUID
    item_id: UUID


@dataclass
class GetItemByCode:
    """دریافت کالا با کد."""
    tenant_id: UUID
    item_code: str


@dataclass
class ListItems:
    """لیست کالاها."""
    tenant_id: UUID
    item_type_id: Optional[UUID] = None
    item_group_id: Optional[UUID] = None
    status: Optional[str] = None
    search_query: Optional[str] = None
    page: int = 1
    page_size: int = 20


@dataclass
class GetStockBalance:
    """دریافت موجودی یک کالا در یک انبار."""
    tenant_id: UUID
    item_id: UUID
    warehouse_id: UUID
    batch_id: Optional[UUID] = None
    stock_status_id: Optional[UUID] = None


@dataclass
class GetItemTotalStock:
    """دریافت کل موجودی یک کالا در همه انبارها."""
    tenant_id: UUID
    item_id: UUID


@dataclass
class GetWarehouseStock:
    """دریافت موجودی یک انبار."""
    tenant_id: UUID
    warehouse_id: UUID
    item_group_id: Optional[UUID] = None
    page: int = 1
    page_size: int = 50


@dataclass
class GetATP:
    """محاسبه Available-to-Promise."""
    tenant_id: UUID
    item_id: UUID
    warehouse_id: Optional[UUID] = None


@dataclass
class GetBatchTraceability:
    """ردیابی بچ."""
    tenant_id: UUID
    batch_id: UUID


@dataclass
class GetSerialTraceability:
    """ردیابی سریال."""
    tenant_id: UUID
    serial_no: str
