from pydantic import BaseModel, validator
from typing import List, Optional
from datetime import datetime
from ...domain.entities.search_request import SearchPlatform, SearchType

class CreateSearchRequestSchema(BaseModel):
    keywords: List[str]
    platforms: List[SearchPlatform]
    search_type: SearchType = SearchType.MANUAL
    user_id: Optional[str] = None
    scheduled_at: Optional[datetime] = None
    
    @validator('keywords')
    def keywords_must_not_be_empty(cls, v):
        if not v or len(v) == 0:
            raise ValueError('Keywords list cannot be empty')
        return v
    
    @validator('platforms')
    def platforms_must_not_be_empty(cls, v):
        if not v or len(v) == 0:
            raise ValueError('Platforms list cannot be empty')
        return v

class SearchRequestSchema(BaseModel):
    id: str
    keywords: List[str]
    platforms: List[SearchPlatform]
    search_type: SearchType
    status: str
    created_at: datetime
    user_id: Optional[str] = None
    scheduled_at: Optional[datetime] = None

class SearchTaskSchema(BaseModel):
    id: str
    search_request_id: str
    platform: SearchPlatform
    keywords: List[str]
    status: str
    created_at: datetime
