"""qa-report.json schema produced by the QA Engineer."""

from __future__ import annotations

from typing import List, Literal, Optional

from pydantic import BaseModel, Field, field_validator


class TestScenario(BaseModel):
    name: str
    type: Literal["positive", "negative", "manual"]
    description: str
    acceptance_criterion: Optional[str] = None

    @field_validator("type", mode="before")
    @classmethod
    def normalize_type(cls, value: object) -> object:
        """OpenAI often returns 'Positive' / 'Negative'; accept case-insensitive values."""
        if isinstance(value, str):
            return value.strip().lower()
        return value


class QAReportArtifact(BaseModel):
    jira_key: str
    passed: bool
    test_matrix: List[TestScenario] = Field(default_factory=list)
    apex_tests_run: int = 0
    apex_tests_passed: int = 0
    apex_failures: List[str] = Field(default_factory=list)
    manual_scenarios: List[str] = Field(default_factory=list)
    summary: str
    notes: Optional[str] = None
