from __future__ import annotations
from typing import Optional, List
from decimal import Decimal
from datetime import datetime
from pydantic import BaseModel


class OrderStatusUpdate(BaseModel):
    status: str   # pending / paid / shipped / completed / cancelled


class OrderItemOut(BaseModel):
    id: int
    product_id: Optional[int] = None
    product_name: str = ""
    sku: str = ""
    qty: int
    unit_price: Decimal
    subtotal: Decimal

    model_config = {"from_attributes": True}


class OrderOut(BaseModel):
    id: int
    order_no: str
    status: str
    grand_total: Decimal
    items_count: int = 0
    customer_name: Optional[str] = None
    created_at: Optional[datetime] = None

    model_config = {"from_attributes": True}


class OrderDetailOut(OrderOut):
    subtotal: Decimal = Decimal("0")
    shipping_fee: Decimal = Decimal("0")
    discount_amount: Decimal = Decimal("0")
    shipping_address: Optional[dict] = None
    remark: Optional[str] = None
    items: List[OrderItemOut] = []
