# backend/app/plugins/unit_split/schemas.py
from __future__ import annotations
from decimal import Decimal
from typing import Optional
from pydantic import BaseModel, computed_field


class UnitDictIn(BaseModel):
    unit_name: str
    unit_name_en: Optional[str] = None


class UnitDictOut(BaseModel):
    id: int
    unit_name: str
    unit_name_en: Optional[str] = None
    is_system: bool

    model_config = {"from_attributes": True}


class SellingUnitIn(BaseModel):
    dict_id: Optional[int] = None
    unit_name: str
    unit_name_en: Optional[str] = None
    qty_per_base: int = 1
    is_base_unit: bool = False
    price_override: Optional[Decimal] = None
    sort_order: int = 0


class SellingUnitOut(BaseModel):
    id: int
    unit_name: str
    unit_name_en: Optional[str] = None
    qty_per_base: int
    is_base_unit: bool
    price_override: Optional[float] = None
    sort_order: int
    base_price: float = 0.0  # injected at query time from product

    @computed_field
    @property
    def effective_price(self) -> float:
        if self.price_override is not None:
            return self.price_override
        return self.base_price * self.qty_per_base

    model_config = {"from_attributes": True}
