from pydantic import BaseModel, Field
from typing import List, Optional, Dict, Any
from datetime import datetime
from enum import Enum

class SearchResult(BaseModel):
    title: str
    url: str
    description: Optional[str] = None
    snippet: Optional[str] = None
    published_date: Optional[datetime] = None
    author: Optional[str] = None
    source: Optional[str] = None
    metadata: Dict[str, Any] = Field(default_factory=dict)

class SearchTask(BaseModel):
    id: str
    search_request_id: str
    platform: str
    keywords: List[str]
    created_at: datetime
    metadata: Dict[str, Any] = Field(default_factory=dict)

class SearchResponse(BaseModel):
    task_id: str
    platform: str
    keywords: List[str]
    results: List[SearchResult]
    total_results: int
    processing_time: float
    timestamp: datetime
    metadata: Dict[str, Any] = Field(default_factory=dict)

class SearchError(BaseModel):
    task_id: str
    platform: str
    error_type: str
    error_message: str
    timestamp: datetime
    metadata: Dict[str, Any] = Field(default_factory=dict)
