"""Validaciones mínimas para generación de DE.

La versión TypeScript tiene un set de validaciones muy extenso; aquí mantenemos
una base mínima e incrementamos gradualmente.
"""

from __future__ import annotations

from ..config import XmlgenConfig
from ..errors import ErrorCollector


def validate_de(params: dict, data: dict, config: XmlgenConfig, errors: ErrorCollector) -> None:
    """Valida campos mínimos requeridos para generar un DE."""
    if not params.get("ruc"):
        errors.add("Debe completar Tipo de Documento en params.ruc")

    tipo_documento = data.get("tipoDocumento")
    if tipo_documento is None:
        errors.add("Debe completar Tipo de Documento en data.tipoDocumento")

    if data.get("establecimiento") is None:
        errors.add("Debe completar Establecimiento de la Emisión en data.establecimiento")

    if data.get("punto") is None:
        errors.add("Debe completar el Punto de emisión en data.punto")

    if data.get("numero") is None:
        errors.add("Debe completar el Número de Documento en data.numero")

    if data.get("fecha") is None:
        errors.add("Debe completar la Fecha de Emisión en data.fecha")

    ruc = params.get("ruc")
    if ruc and "-" not in str(ruc):
        errors.add("El RUC del Emisor debe contener el DV en params.ruc")

    if data.get("cliente") is None:
        errors.add("Debe especificar los datos del Cliente en data.cliente")
    else:
        contrib = data["cliente"].get("contribuyente")
        if contrib is None:
            errors.add("Debe indicar si el Cliente es o no un Contribuyente true|false en data.cliente.contribuyente")
        elif contrib not in (True, False):
            errors.add("data.cliente.contribuyente debe ser true|false")
