from __future__ import annotations

from typing import Optional

from pydantic import BaseModel, ConfigDict, Field


class MenuItem(BaseModel):
    model_config = ConfigDict(extra="ignore")

    name: str = Field(..., description="Translated dish or drink name.")
    description: Optional[str] = Field(default=None, description="Translated description or ingredients.")
    description_uk: Optional[str] = Field(default=None, description="Description translated to English (always in English regardless of target language).")
    price: Optional[str] = Field(default=None, description="Price as numeric value without currency symbols (e.g., '12.50').")
    serving_size: Optional[str] = Field(default=None, description="Portion size or quantity.")
    measure: Optional[int] = Field(default=None, description="Unit of measure type: 0 (grams), 1 (milliliters), 2 (pieces), 3 (centimeters), or null.")
    notes: Optional[str] = Field(default=None, description="Additional qualifiers such as spicy level or allergens.")


class MenuCategory(BaseModel):
    model_config = ConfigDict(extra="ignore")

    name: str
    description: Optional[str] = None
    description_uk: Optional[str] = Field(default=None, description="Category description translated to English (always in English regardless of target language).")
    items: list[MenuItem]


class MenuPayload(BaseModel):
    model_config = ConfigDict(extra="ignore")

    restaurant_name: Optional[str] = None
    categories: list[MenuCategory]


class MenuExtractionResponse(BaseModel):
    menu: MenuPayload
    source_language: str
    target_language: str
    model: str
    image_count: int
