import uuid
from datetime import datetime

from sqlmodel import Field, SQLModel

from app.db.base import TenantModel


class MenuItemBase(SQLModel):
    name: str = Field(nullable=False)
    description: str | None = Field(default=None, nullable=True)
    price_cents: int = Field(nullable=False)
    category: str = Field(nullable=False)
    photo_url: str | None = Field(default=None, nullable=True)
    is_active: bool = Field(default=True, nullable=False)
    sort_order: int = Field(default=0, nullable=False)


class MenuItem(MenuItemBase, TenantModel, table=True):
    __tablename__ = "menu_item"  # pyright: ignore[reportAssignmentType]

    id: str = Field(
        default_factory=lambda: str(uuid.uuid4()),
        primary_key=True,
    )


class MenuItemCreate(SQLModel):
    name: str
    price_cents: int = Field(ge=1)
    category: str
    description: str | None = None
    is_active: bool = True
    sort_order: int = 0


class MenuItemRead(MenuItemBase):
    id: str
    restaurant_id: str
    created_at: datetime
    updated_at: datetime | None = None


class MenuItemUpdate(SQLModel):
    name: str | None = None
    description: str | None = None
    price_cents: int | None = Field(default=None, ge=1)
    category: str | None = None
    photo_url: str | None = None
    is_active: bool | None = None
    sort_order: int | None = None
