from pydantic import BaseModel


class StatusBreakdown(BaseModel):
    success: int = 0
    partial: int = 0
    failed: int = 0


class ParserPerformanceSummary(BaseModel):
    total_extractions: int
    confirmed_policies: int
    pending_review: int
    total_reviews: int
    extraction_success_rate: float
    field_accuracy_rate: float
    overall_parser_score: float
    status_breakdown: StatusBreakdown


class CompanyPerformanceItem(BaseModel):
    company_code: str
    company_name: str | None = None
    extractions: int
    status_breakdown: StatusBreakdown
    extraction_success_rate: float
    reviews: int
    field_accuracy_rate: float
    top_corrected_fields: list[str]


class FieldAccuracyItem(BaseModel):
    field_name: str
    comparisons: int
    changes: int
    accuracy_rate: float


class RecentReviewItem(BaseModel):
    id: int
    extraction_id: int
    original_filename: str
    company_code: str | None
    extraction_status: str | None
    fields_changed: int
    fields_compared: int
    accuracy_rate: float
    source: str
    created_at: str | None


class ParserPerformanceResponse(BaseModel):
    summary: ParserPerformanceSummary
    by_company: list[CompanyPerformanceItem]
    by_field: list[FieldAccuracyItem]
    recent_reviews: list[RecentReviewItem]
