from __future__ import annotations
import uuid
from datetime import datetime
from pydantic import BaseModel
from typing import Any


class ParsedComponent(BaseModel):
    part_name: str | None = None
    material: str | None = None
    component_type: str | None = None
    column_index: int


class ParsedRow(BaseModel):
    row_index: int
    ebene1: str | None = None
    ebene2: str | None = None
    baureihe: str | None = None
    pim_id: str | None = None
    produkt_baureihe: str | None = None
    gewaehltes_produkt: str | None = None
    name_cad_modell: str | None = None
    gewuenschte_bildnummer: str | None = None
    lagertyp: str | None = None
    medias_rendering: bool | None = None
    components: list[ParsedComponent] = []


class ParsedExcelResponse(BaseModel):
    filename: str
    excel_path: str | None = None   # server-side path of the saved file
    category_key: str | None = None
    template_name: str | None = None
    row_count: int
    column_headers: list[str]
    rows: list[ParsedRow]
    warnings: list[str] = []


class StepUploadResponse(BaseModel):
    cad_file_id: str
    original_name: str
    file_hash: str
    status: str
    matched_items: list[str] = []


# ── Import Validation ──────────────────────────────────────────────────────

class ValidationIssue(BaseModel):
    type: str           # "missing_material" | "material_suggestion" | "no_step" | "duplicate"
    field: str | None = None
    value: str | None = None
    suggestion: str | None = None
    message: str


class ImportValidationOut(BaseModel):
    id: uuid.UUID
    tenant_id: uuid.UUID | None
    excel_path: str
    status: str
    summary: dict | None
    rows: list | None
    created_at: datetime
    completed_at: datetime | None

    model_config = {"from_attributes": True}
