from datetime import datetime
from typing import List, Optional
from uuid import UUID
from pydantic import BaseModel, Field
from src.apps.base.schemas.region import RegionOutSchema
from src.apps.base.schemas.common import BaseSchema
# ----------- Locale Schemas -----------

class LocaleBaseSchema(BaseSchema):
    name: Optional[str] = Field(None, example="English (UK)")
    location_id: Optional[int] = Field(None, example=1)


class LocaleCreateSchema(LocaleBaseSchema):
    pass

class LocaleCreateSchemaWithLocation(BaseSchema):
    name: Optional[str] = Field(..., example="English (UK)")

class LocaleUpdateSchema(BaseSchema):
    name: Optional[str] = Field(None, example="New Locale Name")
    location_id: Optional[int] = Field(None, example=1)


class LocaleOutSchema(LocaleBaseSchema):
    id: int
    created_at: datetime
    updated_at: datetime
    
class LocaleFilterSchema(BaseModel):
    location_id: Optional[int] = None

# ----------- Location Schemas -----------

class LocationBaseSchema(BaseSchema):
    name: Optional[str] = Field(None, example="London City Center")
    region_id: Optional[int] = Field(None, example=1)

class LocationCreateSchema(LocationBaseSchema):
    locales: Optional[List[LocaleCreateSchemaWithLocation]] = Field(default_factory=list)


class LocationUpdateSchema(BaseSchema):
    name: Optional[str] = Field(None, example="New Location Name")
    region_id: Optional[int] = Field(None, example=1)
    locales: Optional[List[LocaleCreateSchemaWithLocation]] = Field(default_factory=list)

class LocationOutSchema(BaseSchema):
    id: Optional[int] = Field(None, example=1)
    name: Optional[str] = Field(None, example="London City Center")
    region: Optional[RegionOutSchema] = None
    created_at: datetime
    updated_at: datetime
    locales: Optional[List[LocaleOutSchema]] = None
    
class LocationFilterSchema(BaseModel):
    region_id: Optional[int] = None