"""Schemas — Multi-language coding challenge AI judge (SOW)."""

from typing import Any
from uuid import UUID

from pydantic import BaseModel, Field

from app.schemas.common import StubMeta


class CodingJudgeRequest(BaseModel):
    """POST /api/v1/coding/judge"""

    correlation_id: UUID | None = None
    challenge_id: str | None = None
    language: str = Field(..., examples=["python", "javascript", "java", "go"])
    problem_statement: str = Field(..., min_length=10)
    starter_code: str | None = None
    candidate_code: str = Field(..., min_length=1)
    test_cases: list[dict[str, Any]] = Field(default_factory=list)
    rubric: dict[str, Any] = Field(default_factory=dict)
    options: dict[str, Any] = Field(default_factory=dict)


class CodingJudgeResponse(StubMeta):
    correlation_id: UUID | None = None
    challenge_id: str | None = None
    total_score: float = 0.0
    max_total_score: float = 100.0
    passed: bool | None = None
    correctness: float | None = None
    code_quality: float | None = None
    efficiency: float | None = None
    feedback_markdown: str | None = None
    failing_tests: list[str] = Field(default_factory=list)
