from typing import List
from pydantic import BaseModel, Field
from typing import Optional
from decimal import Decimal
from datetime import datetime
from src.apps.base.schemas.common import BaseSchema
from src.apps.base.schemas.country import CountryOutSchema
from src.apps.wine.bottle_size.schemas.bottle_size import BottleSizeOutputSchema
from src.apps.wine.retailer.schemas.retailer import RetailerOutputSchema
from src.utils.constants import MAX_PER_PAGE,DEFAULT_PER_PAGE
# from src.apps.wine.wine.schemas.wine import WineOutputSchema

class RetailerWineSchema(BaseSchema):
    name: Optional[str] = None
    quantity: Optional[int] = None
    tax_status: Optional[str] = None
    description: Optional[str] = None
    sku: Optional[str] = None
    url: Optional[str] = None
    currency: Optional[str] = None
    price: Optional[Decimal] = None
    usd_price: Optional[Decimal] = None
    available: Optional[bool] = True
    last_available: Optional[datetime] = None
    
class RetailerWineCreateSchema(RetailerWineSchema):
    literal: Optional[str] = None
    bottle_size_id: Optional[int] = None
    retailer_id: Optional[int] = None
    wine_id: Optional[int] = None
    
class RetailerWineUpdateSchema(RetailerWineSchema):
    deleted_at: Optional[datetime] = None
    bottle_size_id: Optional[int] = None
    retailer_id: Optional[int] = None
    wine_id: Optional[int] = None
    
class RetailerWineOutputSchema(RetailerWineSchema):
    id: Optional[int] = None
    literal: Optional[str] = None
    bottle_size: Optional[BottleSizeOutputSchema] = None
    retailer: Optional[RetailerOutputSchema] = None
    # wine: Optional[WineOutputSchema] = None
    date_created: Optional[datetime] = None
    last_updated: Optional[datetime] = None