"""Catálogos mínimos para completar descripciones (dDes*).

Este módulo es intencionalmente pequeño: contiene solo los códigos necesarios
para los casos base. Se ampliará a catálogos completos SIFEN en una etapa
posterior.
"""

from __future__ import annotations


def descripcion_tipo_emision(tipo_emision: int) -> str:
    if tipo_emision == 1:
        return "Normal"
    if tipo_emision == 2:
        return "Contingencia"
    return ""


def descripcion_tipo_documento(tipo_documento: int) -> str:
    # Catálogo mínimo (ampliar luego con el catálogo completo SIFEN)
    if tipo_documento == 1:
        return "Factura electrónica"
    if tipo_documento == 4:
        return "Autofactura electrónica"
    if tipo_documento == 5:
        return "Nota de crédito electrónica"
    if tipo_documento == 6:
        return "Nota de débito electrónica"
    if tipo_documento == 7:
        return "Nota de remisión electrónica"
    return ""


def descripcion_tipo_impuesto(tipo_impuesto: int) -> str:
    # Catálogo mínimo
    if tipo_impuesto == 1:
        return "IVA"
    if tipo_impuesto == 2:
        return "ISC"
    if tipo_impuesto == 3:
        return "Renta"
    if tipo_impuesto == 4:
        return "Ninguno"
    if tipo_impuesto == 5:
        return "IVA - Renta"
    return ""


def descripcion_moneda(codigo: str) -> str:
    if codigo == "PYG":
        return "Guarani"
    if codigo == "USD":
        return "Dólar"
    if codigo == "EUR":
        return "Euro"
    return ""


def descripcion_pais(codigo: str) -> str:
    if codigo == "PRY":
        return "Paraguay"
    return ""


def descripcion_tipo_documento_identidad_receptor(codigo: int) -> str:
    # Catálogo mínimo para dDTipIDRec (ampliar luego)
    # 1: Cédula paraguaya
    # 2: Pasaporte (en algunos catálogos puede ser 3; usar el oficial según SIFEN)
    # 3: Pasaporte
    # 4: Cédula de extranjero
    # 5: Innominado
    if codigo == 1:
        return "Cédula paraguaya"
    if codigo in (2, 3):
        return "Pasaporte"
    if codigo == 4:
        return "Cédula de extranjero"
    if codigo == 5:
        return "Innominado"
    return ""


def descripcion_departamento(codigo: int) -> str:
    # Catálogo mínimo (ampliar luego)
    if codigo == 1:
        return "CAPITAL"
    return ""


def descripcion_distrito(codigo: int) -> str:
    # Catálogo mínimo (ampliar luego)
    if codigo == 1:
        return "ASUNCION (DISTRITO)"
    return ""


def descripcion_ciudad(codigo: int) -> str:
    # Catálogo mínimo (ampliar luego)
    if codigo == 1:
        return "ASUNCION (DISTRITO)"
    return ""


def descripcion_motivo_emision_ncde(codigo: int) -> str:
    if codigo == 1:
        return "Devolución y Ajuste de precios"
    if codigo == 2:
        return "Devolución"
    if codigo == 3:
        return "Descuento"
    if codigo == 4:
        return "Bonificación"
    if codigo == 5:
        return "Crédito incobrable"
    if codigo == 6:
        return "Recupero de costo"
    if codigo == 7:
        return "Recupero de gasto"
    if codigo == 8:
        return "Ajuste de precio"
    return ""


def descripcion_motivo_traslado_nre(codigo: int) -> str:
    if codigo == 1:
        return "Traslado por ventas"
    if codigo == 2:
        return "Traslado por consignación"
    if codigo == 3:
        return "Exportación"
    if codigo == 4:
        return "Traslado por compra"
    if codigo == 5:
        return "Importación"
    if codigo == 6:
        return "Traslado por devolución"
    if codigo == 7:
        return "Traslado entre locales de la empresa"
    if codigo == 8:
        return "Traslado de bienes por transformación"
    if codigo == 9:
        return "Traslado de bienes para reparación"
    if codigo == 10:
        return "Traslado por emisor móvil"
    if codigo == 11:
        return "Exhibición o Demostración"
    if codigo == 12:
        return "Participación en ferias"
    if codigo == 13:
        return "Traslado de encomienda"
    if codigo == 14:
        return "Decomiso"
    return ""


def descripcion_resp_emi_nre(codigo: int) -> str:
    if codigo == 1:
        return "Emisor de la factura"
    if codigo == 2:
        return "Poseedor de la factura y bienes"
    if codigo == 3:
        return "Empresa transportista"
    if codigo == 4:
        return "Despachante de Aduanas"
    if codigo == 5:
        return "Agente de transporte o intermediario"
    return ""


def descripcion_tipo_doc_asociado(codigo: int) -> str:
    if codigo == 1:
        return "Electrónico"
    if codigo == 2:
        return "Impreso"
    return ""


def descripcion_unidad_medida(codigo: int) -> str:
    # En TS usan unidadesMedidas[].representacion. Para el caso típico 77 => "UNI".
    if codigo == 77:
        return "UNI"
    # Valores comunes según XSD Unidades_Medida_v141.xsd
    if codigo == 83:
        return "kg"
    if codigo == 89:
        return "LT"
    if codigo == 87:
        return "m"
    if codigo == 109:
        return "M2"
    if codigo == 110:
        return "M3"
    if codigo == 99:
        return "TN"
    return ""


def descripcion_tipo_transaccion(codigo: int) -> str:
    if codigo == 1:
        return "Venta de mercadería"
    if codigo == 2:
        return "Prestación de servicios"
    if codigo == 3:
        return "Mixto (Venta de mercadería y servicios)"
    if codigo == 4:
        return "Venta de activo fijo"
    if codigo == 5:
        return "Venta de divisas"
    if codigo == 6:
        return "Compra de divisas"
    if codigo == 7:
        return "Promoción o entrega de muestras"
    if codigo == 8:
        return "Donación"
    if codigo == 9:
        return "Anticipo"
    if codigo == 10:
        return "Compra de productos"
    if codigo == 11:
        return "Compra de servicios"
    if codigo == 12:
        return "Venta de crédito fiscal"
    if codigo == 13:
        return "Muestras médicas (Art. 3 RG 24/2014)"
    return ""


def descripcion_condicion_anticipo(codigo: int) -> str:
    # En TS: "Anticipo " + constanteService.globalPorItem.descripcion
    if codigo == 1:
        return "Global"
    if codigo == 2:
        return "por Ítem"
    return ""


def descripcion_indicador_presencia(codigo: int) -> str:
    """Descripción mínima del indicador de presencia (iIndPres).

    Se usa en `gDtipDE/gCamFE` (Factura Electrónica). En etapas posteriores se
    migrará el catálogo completo.
    """

    if codigo == 1:
        return "Operación presencial"
    if codigo == 2:
        return "Operación no presencial"
    if codigo == 3:
        return "Operación no presencial, por medios electrónicos"
    if codigo == 4:
        return "Operación no presencial, por medios telefónicos"
    return ""
