/**
 * Cuánto se le cobra por mes a una suscripción.
 *
 * `precio_venta` guarda el precio ACORDADO con el cliente al crear la cuenta o
 * al editar sus condiciones comerciales; el precio del plan es solo la lista.
 * Todo recálculo tiene que partir del acordado: usar el del plan le borra el
 * descuento al cliente en silencio y lo empieza a facturar más caro.
 */

const num = (v: unknown): number => {
  const n = Number(v);
  return Number.isFinite(n) ? n : 0;
};

export function costoMensualDeSuscripcion(params: {
  /** Precio acordado con el cliente. null/undefined = no hay acuerdo, vale la lista. */
  precioVenta: unknown;
  /** Precio de lista del plan. */
  precioPlan: unknown;
  /** Suma de los módulos adicionales contratados. */
  adicionales: number;
}): number {
  // Un acordado de 0 es un acuerdo (cuenta bonificada), no un campo vacío: por
  // eso `??` y no `||`.
  const base = params.precioVenta ?? null;
  const precioBase = base === null ? num(params.precioPlan) : num(base);
  return Math.max(0, precioBase + num(params.adicionales));
}
