import type { Database } from 'bun:sqlite';

let currentDb: Database | null = null;

/**
 * Establece la instancia global de DB.
 * Se permite sobrescribir (útil en tests).
 */
export function setDb(db: Database): void {
  currentDb = db;
}

/**
 * Obtiene la instancia global de DB o lanza si no está configurada.
 */
export function getDb(): Database {
  if (currentDb) return currentDb;
  throw new Error('Database has not been configured. Call setDb(db) before using getDb().');
}

/**
 * Resetea la instancia global de DB. Útil en tests para detectar fugas entre suites.
 */
export function resetDb(): void {
  currentDb = null;
}

/**
 * Ejecuta una función con la DB actual (sync o async) y devuelve su resultado.
 */
export function withDb<T>(fn: (db: Database) => T | Promise<T>): T | Promise<T> {
  const db = getDb();
  return fn(db);
}
