from __future__ import annotations

from typing import List

from pydantic import BaseModel, ConfigDict, Field


class ProdutoEstoqueBase(BaseModel):
    catalogo_id: str = Field(min_length=1, max_length=255)
    venda_id: str = Field(min_length=1, max_length=255)
    quantidade: int = Field(ge=0)


class ProdutoEstoqueCreate(ProdutoEstoqueBase):
    pass


class ProdutoEstoqueUpdate(BaseModel):
    catalogo_id: str | None = Field(default=None, min_length=1, max_length=255)
    venda_id: str | None = Field(default=None, min_length=1, max_length=255)
    quantidade: int | None = Field(default=None, ge=0)


class ProdutoEstoqueOut(BaseModel):
    id: str
    catalogo_id: str
    venda_id: str
    quantidade: int
    createdAt: str
    updatedAt: str

    model_config = ConfigDict(
        json_schema_extra={
            "example": {
                "id": "66fd0abca1f0xxxxxx",
                "catalogo_id": "cat_123",
                "venda_id": "ven_456",
                "quantidade": 10,
                "createdAt": "2025-10-01T12:00:00.000Z",
                "updatedAt": "2025-10-01T12:00:00.000Z"
            }
        }
    )


class PaginatedProdutosEstoque(BaseModel):
    items: List[ProdutoEstoqueOut]
    total: int

    model_config = ConfigDict(
        json_schema_extra={
            "example": {
                "items": [
                    {
                        "id": "66fd0abca1f0xxxxxx",
                        "catalogo_id": "cat_123",
                        "venda_id": "ven_456",
                        "quantidade": 10,
                        "createdAt": "2025-10-01T12:00:00.000Z",
                        "updatedAt": "2025-10-01T12:00:00.000Z"
                    }
                ],
                "total": 1
            }
        }
    )
