from uuid import UUID, uuid4
from pydantic import BaseModel, Field
from decimal import Decimal

class InventoryItem(BaseModel):
    id: UUID = Field(default_factory=uuid4)
    material_code: str
    warehouse_id: str
    quantity_on_hand: Decimal = Field(default=Decimal("0.0000"), max_digits=18, decimal_places=4)
    reserved_quantity: Decimal = Field(default=Decimal("0.0000"), max_digits=18, decimal_places=4)
    
    def add_stock(self, amount: Decimal):
        self.quantity_on_hand += amount
        
    def reserve_stock(self, amount: Decimal):
        if self.quantity_on_hand - self.reserved_quantity < amount:
            raise ValueError("Không đủ tồn kho khả dụng để giữ chỗ.")
        self.reserved_quantity += amount
