import uuid
from datetime import datetime

from pydantic import BaseModel, ConfigDict

from app.models.knowledge import FileType, SourceStatus


class KnowledgeSourceOut(BaseModel):
    model_config = ConfigDict(from_attributes=True)

    id: uuid.UUID
    project_id: uuid.UUID
    filename: str
    original_filename: str
    file_type: FileType
    file_size_bytes: int
    tags: list[str]
    category: str | None
    source: str | None
    status: SourceStatus
    error_message: str | None
    created_at: datetime
    updated_at: datetime


class KnowledgeSourceUpdate(BaseModel):
    tags: list[str] | None = None
    category: str | None = None
    source: str | None = None


class ExtractedTextOut(BaseModel):
    model_config = ConfigDict(from_attributes=True)

    id: uuid.UUID
    knowledge_source_id: uuid.UUID
    raw_text: str | None
    cleaned_text: str | None
    cleaning_report: dict
    is_confirmed: bool


class CleanPreviewRequest(BaseModel):
    pass


class ConfirmCleanRequest(BaseModel):
    cleaned_text: str
