"""
SCM Public Commands — Contract v1.

دستوراتی که سایر ماژول‌ها می‌توانند برای SCM ارسال کنند.
"""
from dataclasses import dataclass, field
from decimal import Decimal
from typing import Optional
from uuid import UUID


@dataclass(frozen=True)
class CreatePurchaseRequisitionFromInventory:
    """ایجاد درخواست خرید توسط ماژول انبار هنگام رسیدن به نقطه سفارش."""
    tenant_id: UUID
    requested_by: UUID
    warehouse_id: UUID
    items: list = field(default_factory=list)
    notes: str = ""
    # items: list of {"product_id": UUID, "quantity": Decimal, "unit": str}


@dataclass(frozen=True)
class BlockVendor:
    """مسدود کردن تأمین‌کننده توسط سیستم."""
    tenant_id: UUID
    vendor_id: UUID
    reason: str = ""


@dataclass(frozen=True)
class UnblockVendor:
    """رفع انسداد تأمین‌کننده."""
    tenant_id: UUID
    vendor_id: UUID
