"""Schemas — Case study simulator (SOW Assessment Hub)."""

from typing import Any
from uuid import UUID

from pydantic import BaseModel, Field

from app.schemas.common import StubMeta
from app.schemas.questions import Difficulty


class CaseStudyGenerateRequest(BaseModel):
    """POST /api/v1/case-studies/generate"""

    correlation_id: UUID | None = None
    role_title: str
    industry: str | None = None
    job_description: str | None = None
    difficulty: Difficulty = Difficulty.MEDIUM
    time_limit_minutes: int = Field(default=45, ge=10, le=240)
    language: str = Field(default="en", min_length=2, max_length=10)
    options: dict[str, Any] = Field(default_factory=dict)


class CaseStudyGenerateResponse(StubMeta):
    correlation_id: UUID | None = None
    case_id: str | None = None
    title: str | None = None
    scenario_markdown: str | None = None
    tasks: list[str] = Field(default_factory=list)
    rubric: dict[str, Any] = Field(default_factory=dict)


class CaseStudyGradeRequest(BaseModel):
    """POST /api/v1/case-studies/grade"""

    correlation_id: UUID | None = None
    case_id: str
    role_title: str
    candidate_submission: str = Field(..., min_length=1)
    rubric: dict[str, Any] = Field(default_factory=dict)
    language: str = Field(default="en", min_length=2, max_length=10)
    options: dict[str, Any] = Field(default_factory=dict)


class CaseStudyGradeResponse(StubMeta):
    correlation_id: UUID | None = None
    case_id: str
    total_score: float = 0.0
    max_total_score: float = 100.0
    passed: bool | None = None
    feedback_markdown: str | None = None
    rubric_scores: dict[str, Any] = Field(default_factory=dict)
