from typing import List
from pydantic import BaseModel, Field
from typing import Optional
from decimal import Decimal
from datetime import datetime
from fastapi import Query
from src.apps.base.schemas.common import BaseSchema
from src.utils.constants import MAX_PER_PAGE,DEFAULT_PER_PAGE
from src.apps.wine.producer.schemas.producer_keyword import ProducerKeywordOutputSchema
from src.apps.wine.producer.schemas.producer_noise import ProducerNoiseOutputSchema

class ProducerSchema(BaseSchema):
    code: Optional[str] = None
    # name: Optional[str] = None
    name_show: Optional[str] = None
    mongo_id: Optional[str] = None
    source: Optional[str] = None
    
class ProducerCreateSchema(BaseSchema):
    code: Optional[str] = None
    mongo_id: Optional[str] = None
    source: Optional[str] = None
    literal: Optional[str] = None
    # producer_name: Optional[str] = None
    producer_show: Optional[str] = None
    producer_noise: Optional[List[str]] = None
    producer_keyword: Optional[str] = None

class ProducerUpdateSchema(ProducerSchema):
    keyword: Optional[str] = None

class ProducerOutputSchema(ProducerSchema):
    id: Optional[int] = None
    name: Optional[str] = None
    literal: Optional[str] = None
    producer_keyword: Optional[ProducerKeywordOutputSchema] = None
    producer_noises: Optional[List[ProducerNoiseOutputSchema]] = None
    date_created: Optional[datetime] = None
    last_updated: Optional[datetime] = None
    
class ProducerFilterSchema(BaseModel):
    filter_id: str = ""
    keywords: Optional[str] = None
    producers: Optional[str] = None
    search_partial: bool = True
    