export const UNIDADES_MEDIDA = ['ud', 'g', 'kg', 'ml', 'l', 'gr', 'col'];
const UNIDADES = {
    g: { factor: 1, familia: 'masa' },
    gr: { factor: 1, familia: 'masa' },
    kg: { factor: 1000, familia: 'masa' },
    ml: { factor: 1, familia: 'volumen' },
    l: { factor: 1000, familia: 'volumen' },
    ud: { factor: 1, familia: 'unidad' },
    col: { factor: 1, familia: 'unidad' },
};
function normalizarUnidad(unidad) {
    return unidad.toLowerCase().trim();
}
export function calcularCostePorUnidad(importeCompra, cantidadLote) {
    if (cantidadLote <= 0)
        return 0;
    return importeCompra / cantidadLote;
}
export function convertirUnidad(cantidad, desde, hacia) {
    const origen = normalizarUnidad(desde);
    const destino = normalizarUnidad(hacia);
    if (origen === destino)
        return cantidad;
    const unidadOrigen = UNIDADES[origen];
    const unidadDestino = UNIDADES[destino];
    if (!unidadOrigen || !unidadDestino) {
        throw new Error(`No se puede convertir de ${desde} a ${hacia}`);
    }
    if (unidadOrigen.familia !== unidadDestino.familia) {
        throw new Error(`Unidades incompatibles: ${desde} y ${hacia}`);
    }
    return (cantidad * unidadOrigen.factor) / unidadDestino.factor;
}
export function calcularCosteLinea(gasto, cantidadUsada, unidadUsada) {
    const cantidadBase = convertirUnidad(cantidadUsada, unidadUsada, gasto.unidad_medida);
    return cantidadBase * gasto.coste_por_unidad;
}
export function redondearCoste(valor, decimales = 4) {
    const factor = 10 ** decimales;
    return Math.round(valor * factor) / factor;
}
