import AdminAccount from "../models/adminAccount";
import Balance from "../models/balance";

/**
 * Registra una transacción de balance (ingreso o egreso) en la cuenta operativa.
 *
 * Busca la cuenta administrativa en moneda VEF y crea un nuevo registro en la
 * colección `Balance` con el monto, descripción, referencia y cliente opcional.
 * Lanza error si no existe la cuenta operativa.
 *
 * @export
 * @async
 * @param {boolean} isIncome - `true` para ingreso, `false` para egreso.
 * @param {number} amount - Monto de la transacción.
 * @param {string} description - Descripción del movimiento.
 * @param {string} reference - Referencia de la transacción.
 * @param {string} [client] - ID del cliente (opcional).
 * @returns {Promise<void>}
 */
export const registerBalance = async (
  isIncome: boolean,
  amount: number,
  description: string,
  reference: string,
  client?: string,
) => {
  const adminAccount = await AdminAccount.findOne({ currency: "VEF" });
  if (!adminAccount) {
    throw Error("Error obteniendo cuenta operativa");
  }

  await Balance.create({
    account: adminAccount._id,
    isIncome,
    amount,
    description,
    reference,
    client,
  });
};
