import uuid
from datetime import datetime

from pydantic import BaseModel, ConfigDict

from app.models.dataset import Difficulty, ExampleStatus, ExampleType


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

    id: uuid.UUID
    project_id: uuid.UUID
    name: str
    description: str | None
    version: int
    created_at: datetime


class DatasetCreate(BaseModel):
    name: str
    description: str | None = None


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

    id: uuid.UUID
    dataset_id: uuid.UUID
    extracted_text_id: uuid.UUID | None
    parent_example_id: uuid.UUID | None
    example_type: ExampleType
    difficulty: Difficulty
    instruction: str
    input: str | None
    output: str
    status: ExampleStatus
    review_notes: str | None
    generated_by: str | None
    created_at: datetime
    updated_at: datetime


class DatasetExampleUpdate(BaseModel):
    instruction: str | None = None
    input: str | None = None
    output: str | None = None
    example_type: ExampleType | None = None
    difficulty: Difficulty | None = None
    status: ExampleStatus | None = None
    review_notes: str | None = None


class GenerateExamplesRequest(BaseModel):
    knowledge_source_id: uuid.UUID
    count: int = 8
    model: str | None = None
    difficulty_mix: list[Difficulty] = [Difficulty.beginner, Difficulty.intermediate, Difficulty.advanced]


class ExpandExampleRequest(BaseModel):
    variant_types: list[str]
    model: str | None = None
