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.web_crawler.schemas.web_crawler import WebCrawlerResponse
from src.utils.constants import MAX_PER_PAGE,DEFAULT_PER_PAGE

class WorkGroupWebCrawlerSchema(BaseSchema):
    work_group_id: Optional[int] = None
    web_crawler_id: Optional[int] = None
    
class WorkGroupWebCrawlerAdditionSchema(WorkGroupWebCrawlerSchema):
    pass

class WorkGroupWebCrawlerUpdateSchema(WorkGroupWebCrawlerSchema):
    pass

class WorkGroupWebCrawlerOutputSchema(WorkGroupWebCrawlerSchema):
    id: Optional[int] = None
    web_crawler: Optional[WebCrawlerResponse] = None
    created_at: Optional[datetime] = None
    updated_at: Optional[datetime] = None
    
class WorkGroupSchema(BaseSchema):
    name: Optional[str] = None

class WorkGroupCreateSchema(WorkGroupSchema):
    retailer_codes: Optional[List[str]] = None

class WorkGroupUpdateSchema(WorkGroupSchema):
    retailer_codes: Optional[List[str]] = None


class WorkGroupOutputSchema(WorkGroupSchema):
    id: Optional[int] = None
    work_group_web_crawlers: Optional[List[WorkGroupWebCrawlerOutputSchema]] = None  
    created_at: Optional[datetime] = None
    updated_at: Optional[datetime] = None
    
class WorkGroupFilterSchema(BaseModel):
    search: Optional[str] = None