// LOS METODOS DE PAGO, EN UN SOLO SITIO.
//
// Esta lista vivia copiada en cuatro pantallas distintas, y por eso el PUNTO DE
// VENTA se quedo por fuera: durante meses el datafono se cobro sin pedir su
// numero de lote. Un cobro electronico sin referencia no se cuadra contra el
// banco, no se atiende un reclamo de doble cobro y en el libro queda un hueco.
//
// ⚠ OJO CON LA DIFERENCIA, que es la que causo el enredo: "necesita
// referencia" y "hay que ir a verificarlo" NO son la misma pregunta.
//
//   - Pago movil, transferencia y zelle: el cliente dice que pago; el negocio
//     tiene que ir a mirar si la plata llego. Referencia SI, verificar SI.
//   - Punto de venta: el banco lo aprobo en el momento, delante de todos. La
//     referencia sirve para cuadrar la caja, no para aprobar nada.
//     Referencia SI, verificar NO (mandarlo a la cola de "pagos por revisar"
//     seria ponerle a la mesera un trabajo que no existe).
//   - Efectivo: ni lo uno ni lo otro.
//
// La regla de verdad vive en la BASE (fn_pago_necesita_referencia y
// fn_exigir_referencia): esto es el espejo para avisar en pantalla ANTES de
// que el cobro reviente.

// La lista de metodos vive en domain.ts (METODOS_PAGO / MetodoPago); aca solo
// van las REGLAS de cada uno, para no tener dos listas que se desincronicen.
import type { MetodoPago } from './domain';

/** Como se le muestra cada metodo a la gente. */
export const NOMBRE_METODO: Record<MetodoPago, string> = {
  efectivo: 'Efectivo',
  pago_movil: 'Pago Móvil',
  transferencia: 'Transferencia',
  zelle: 'Zelle',
  punto_venta: 'Punto de venta',
};

/** ¿Este cobro tiene que quedar con su numero? Todo lo electronico. */
export function necesitaReferencia(metodo: string | null | undefined): boolean {
  return metodo === 'pago_movil' || metodo === 'transferencia' || metodo === 'zelle' || metodo === 'punto_venta';
}

/**
 * ¿Alguien tiene que ir a comprobar que la plata llego?
 * El punto de venta NO: lo aprobo el banco en el momento.
 */
export function necesitaVerificacion(metodo: string | null | undefined): boolean {
  return metodo === 'pago_movil' || metodo === 'transferencia' || metodo === 'zelle';
}

/** Como se le pide la referencia al que cobra, segun de donde venga el numero. */
export function etiquetaReferencia(metodo: string | null | undefined): string {
  return metodo === 'punto_venta' ? 'Lote o referencia del datáfono' : 'Número de referencia';
}

/**
 * Lo que falta para poder cobrar, o null si esta todo. Mismo minimo que exige
 * la base (4 caracteres): frena el dedazo y el "1" de relleno, sin pelear con
 * los formatos de cada banco.
 */
export function faltaReferencia(metodo: string | null | undefined, referencia: string): string | null {
  if (!necesitaReferencia(metodo)) return null;
  const ref = referencia.trim();
  if (!ref) {
    return metodo === 'punto_venta'
      ? 'Escribe el lote o la referencia del datáfono: es parte del registro fiscal.'
      : 'Escribe el número de referencia del pago: es parte del registro fiscal.';
  }
  if (ref.length < 4) return 'Esa referencia es muy corta: copia el número completo del comprobante.';
  return null;
}
