# app/models/schemas.py

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

class ScrapeRequest(BaseModel):
    url: HttpUrl = Field(..., description="URL to scrape")

class LLMProcessRequest(BaseModel):
    page_id: str = Field(..., description="ID of the page to process with LLM")

class ExtractedContent(BaseModel):
    title: Optional[str] = None
    authors: List[str] = Field(default_factory=list)
    subject: Optional[str] = None
    summary: Optional[str] = None
    body: Optional[str] = None
    keywords: List[str] = Field(default_factory=list)
    publish_date: Optional[str] = None
    language: Optional[str] = None
    content_type: Optional[str] = None
    meta_description: Optional[str] = None
    comments: List[str] = Field(default_factory=list)

class LLMExtractionResult(BaseModel):
    status: str = Field(..., description="LLM processing status")
    extracted_content: Optional[ExtractedContent] = None
    raw_llm_output: Optional[str] = None
    error: Optional[str] = None

class ScrapeResponse(BaseModel):
    id: str = Field(..., description="Unique identifier for the scraped page")
    url: str = Field(..., description="Original URL")
    status: str = Field(..., description="Scraping status")
    html_source: Optional[str] = Field(None, description="Complete HTML source code")
    processing_time: Optional[float] = None
    status_code: Optional[int] = None
    content_length: Optional[int] = None
    scraped_at: Optional[float] = None
    processed_with_llm: bool = Field(default=False, description="Whether page was processed with LLM")
    llm_extraction: Optional[LLMExtractionResult] = None
    error: Optional[str] = None

class LLMProcessResponse(BaseModel):
    page_id: str
    url: str
    llm_processing_status: str
    extracted_content: Optional[ExtractedContent] = None