from typing import Literal

from pydantic import BaseModel, Field

ImportMode = Literal["create_only", "update_existing", "upsert"]
ImportAction = Literal["create", "update", "skip", "error"]


class CustomerImportIssue(BaseModel):
    row: int
    field: str = ""
    message: str


class CustomerImportPreviewRow(BaseModel):
    row: int
    customer_number: str = ""
    company_name: str = ""
    action: ImportAction
    errors: list[CustomerImportIssue] = Field(default_factory=list)
    warnings: list[CustomerImportIssue] = Field(default_factory=list)


class CustomerImportSummary(BaseModel):
    total_rows: int
    valid_rows: int
    error_count: int
    warning_count: int
    duplicate_count: int
    create_count: int
    update_count: int
    skip_count: int


class CustomerImportPreviewResponse(BaseModel):
    mode: ImportMode
    summary: CustomerImportSummary
    rows: list[CustomerImportPreviewRow]
    errors: list[CustomerImportIssue]
    warnings: list[CustomerImportIssue]
    duplicates: list[CustomerImportIssue]


class CustomerImportCommitResponse(BaseModel):
    mode: ImportMode
    summary: CustomerImportSummary
    created: int
    updated: int
    skipped: int
