from __future__ import annotations from datetime import datetime from typing import Optional from pydantic import BaseModel class OrderItemIn(BaseModel): product_id: int name: str quantity: int unit_price: float options: list = [] class OnlineOrderCreate(BaseModel): order_type: str # "delivery" | "dine_in" customer_name: str customer_phone: Optional[str] = None customer_address: Optional[str] = None customer_notes: Optional[str] = None items: list[OrderItemIn] subtotal: float delivery_fee: float = 0.0 total: float class OnlineOrderCreated(BaseModel): order_id: int public_ref: str status: str class OrderStatusOut(BaseModel): public_ref: str status: str rejection_reason: Optional[str] = None class PendingOrderOut(BaseModel): id: int public_ref: str order_type: str customer_name: str customer_phone: Optional[str] = None customer_address: Optional[str] = None customer_notes: Optional[str] = None items_json: str subtotal: float delivery_fee: float total: float status: str created_at: datetime model_config = {"from_attributes": True} class OrderSyncedRequest(BaseModel): local_order_id: int class OrderStatusUpdateRequest(BaseModel): status: str rejection_reason: Optional[str] = None