from decimal import Decimal

from django.conf import settings


def compute_fuera_de_rango(*, umbral_min, umbral_max, valor) -> bool:
    if valor is None:
        return False
    if umbral_min is not None and valor < umbral_min:
        return True
    if umbral_max is not None and valor > umbral_max:
        return True
    return False


def _is_proteina_parametro(parametro_nombre: str) -> bool:
    nombre = (parametro_nombre or "").strip().lower()
    return "proteina" in nombre or "proteína" in nombre


def compute_tags_and_alertas(parametros_qs):
    fuera_de_rango = []
    tags = set()

    proteina_umbral = getattr(settings, "MUESTREO_LAB_PROTEINA_ALTA_UMBRAL", None)
    if proteina_umbral is None:
        proteina_umbral = Decimal("12")
    else:
        proteina_umbral = Decimal(str(proteina_umbral))

    for pr in parametros_qs:
        p = pr.parametro
        if pr.fuera_de_rango:
            fuera_de_rango.append(
                {
                    "parametro_id": p.id,
                    "parametro_nombre": p.nombre,
                    "valor": str(pr.valor) if pr.valor is not None else None,
                    "umbral_min": str(p.umbral_min) if p.umbral_min is not None else None,
                    "umbral_max": str(p.umbral_max) if p.umbral_max is not None else None,
                }
            )

        if pr.valor is not None and _is_proteina_parametro(p.nombre) and pr.valor >= proteina_umbral:
            tags.add("proteina_alta")

    alertas = {"fuera_de_rango": fuera_de_rango}
    return sorted(tags), alertas
