"""
Schemas for Reporte de Vencimiento.
"""
from typing import Optional
from pydantic import BaseModel, Field


class VencimientoFilter(BaseModel):
    """
    Filter parameters for the Reporte de Vencimiento CSV.
    Mirrors the UI from the legacy REPORTE DE VENCIMIENTO dialog.
    """
    # Main parameter from the dialog header
    days_ahead: int = Field(default=0, ge=0, description="Facturas próximas a vencer en N días")

    # TIPO DE MONEDA
    currency: str = Field(default="foreign", description="foreign | national")

    # FILTRAR POR
    client_id: Optional[int] = Field(default=None, description="ID del cliente (sold_to_id)")

    # OMITIR CANTIDADES
    min_balance: float = Field(default=0.0, description="Omitir balances menores a este valor (0 = no omitir)")

    # FILTRO OPCIONAL
    conforme_anexo_31: bool = Field(default=False, description="Filtrar conforme al Anexo 31")
    usar_fecha_corte: bool = Field(default=False, description="Usar fecha de corte en lugar de end_date del pedimento")
    fecha_corte: Optional[str] = Field(default=None, description="Fecha de corte ISO (YYYY-MM-DD) cuando usar_fecha_corte=True")

    # OUTPUT
    send_email: bool = Field(default=False)
    julian_date: bool = Field(default=False)

    # Scoping (set by the route, NOT by UI)
    company_id: Optional[int] = None
    tenant_id: Optional[int] = None
