// Audit trail pour les lectures cross-tenant du SuperAdmin. Chaque page panel
// qui charge de la donnée sensible appelle logActivity() en parallèle du
// fetch — async fire-and-forget, ne bloque pas le rendu. Le user MySQL
// `superadmin_ro` a explicitement GRANT INSERT sur `activities_log` (et
// uniquement cette table) pour rendre cette écriture possible sans ouvrir
// le reste de la base.

import "server-only";
import { getPool } from "./connection";

export type SuperAdminActivity = {
  type: string;          // ex: "superadmin.tenants_list"
  title?: string;        // libellé court visible dans le journal
  description?: string;  // détails, params consultés, IP, etc.
  user_id?: number;      // id du compte super-admin (techniciens.id)
  tenant_id?: number;    // tenant ciblé si lecture sur un tenant précis
};

const FALLBACK_TENANT_ID = 0;

export async function logActivity(act: SuperAdminActivity): Promise<void> {
  try {
    const pool = getPool();
    await pool.execute(
      `INSERT INTO activities_log (tenant_id, type, title, description, user_id)
       VALUES (?, ?, ?, ?, ?)`,
      [
        act.tenant_id ?? FALLBACK_TENANT_ID,
        act.type,
        act.title ?? null,
        act.description ?? null,
        act.user_id ?? null,
      ],
    );
  } catch (err) {
    // Audit log ne doit jamais bloquer le rendu — on logge en console et on
    // continue. L'incident reste détectable par l'absence d'événements
    // pendant un intervalle attendu.
    console.warn("[audit] logActivity failed:", (err as Error).message);
  }
}
