// src/lib/observability/timed.ts — timing structuré des requêtes analytiques.
// Phase 0 du premortem DuckDB : on chiffre la contention réelle AVANT
// d'investir dans la Phase 1. Une ligne par requête, parsable (JSON), visible
// dans les logs d3k en dev et Dokploy en prod.

export async function timed<T>(
  label: string,
  meta: Record<string, string | number>,
  fn: () => Promise<T>,
): Promise<T> {
  const t0 = performance.now();
  const result = await fn();
  try {
    const ms = Math.round((performance.now() - t0) * 10) / 10;
    const rows = Array.isArray(result) ? result.length : -1;
    console.log("[query-timing]", JSON.stringify({ label, ms, rows, ...meta }));
  } catch {
    // le logging ne doit jamais casser la requête
  }
  return result;
}
