/**
 * La cuenta por pagar de un gasto.
 *
 * Todo gasto con proveedor crea su CxP al registrarse: pendiente si es crédito
 * (o diferido a orden de pago), ya pagada si es contado. Esa CxP es un reflejo
 * del gasto, no un hecho aparte: mientras nada la haya pagado, editar el gasto
 * debe rearmarla, no quedar bloqueado por ella. Antes se bloqueaba por su sola
 * existencia, con lo que ningún gasto admitía cambiar monto, proveedor ni forma
 * de pago aunque no tuviera ningún pago.
 */

/** Lo que de verdad ató la CxP a un pago: si hay algo acá, el gasto no se toca. */
export interface VinculosPagoCxp {
  /** Pagos a proveedor no anulados. */
  pagos: number;
  /** Números de órdenes de pago no anuladas que la incluyen. */
  ordenesPago: string[];
  /** Números de recibos multi no anulados que la aplican. */
  recibos: string[];
}

export function motivoBloqueoEdicionFinanciera(v: VinculosPagoCxp): string | null {
  const base = 'No se puede editar monto, proveedor ni forma de pago del gasto porque';
  if (v.ordenesPago.length > 0) {
    return `${base} está incluido en la orden de pago N° ${v.ordenesPago.join(', ')}. Anulá la orden de pago primero.`;
  }
  if (v.recibos.length > 0) {
    return `${base} está aplicado en el recibo N° ${v.recibos.join(', ')}. Anulá el recibo primero.`;
  }
  if (v.pagos > 0) {
    return `${base} tiene pagos aplicados en cuentas por pagar. Anulá los pagos primero.`;
  }
  return null;
}

const redondear = (n: number) => Math.round((Number(n) || 0) * 100) / 100;

export function datosCxpGasto(p: { total: number; pendiente: boolean }) {
  const total = redondear(p.total);
  return {
    monto_original: total,
    monto_pagado: p.pendiente ? 0 : total,
    saldo_pendiente: p.pendiente ? total : 0,
    estado: p.pendiente ? 'pendiente' : 'pagada',
  };
}
