from __future__ import annotations

from decimal import Decimal

from django.conf import settings

from apps.traspasos.models import Traspaso, TraspasoLog


def calcular_diferencia(peso_salida: Decimal, peso_llegada: Decimal) -> Decimal:
    if peso_salida is None or peso_llegada is None:
        return Decimal("0")
    if peso_salida == 0:
        return Decimal("0")
    pct = ((peso_llegada - peso_salida) / peso_salida) * Decimal("100")
    return pct.quantize(Decimal("0.01"))


def registrar_log(traspaso: Traspaso, usuario, accion: str, detalle: dict | None = None) -> TraspasoLog:
    return TraspasoLog.objects.create(
        traspaso=traspaso,
        usuario=usuario,
        accion=accion,
        detalle=detalle or {},
    )


def validar_stock(bodega_id: int, variedad_id: int, kilos: Decimal, boleta_id: int | None = None) -> bool:
    if kilos is None:
        return False
    try:
        kilos = Decimal(str(kilos))
    except Exception:
        return False

    if kilos <= 0:
        return False

    return True


def get_traspaso_margen_porcentaje() -> Decimal:
    raw = getattr(settings, "TRASPASO_MARGEN_PORCENTAJE", 5.0)
    try:
        return Decimal(str(raw))
    except Exception:
        return Decimal("5.0")
