import type { Request } from "express";
import { prisma } from "./prisma";

interface LoginEventInput {
  userId?: string | null;
  username: string;
  success: boolean;
  kind?: "password" | "impersonation";
  actor?: string | null;
}

// Enregistre un événement de connexion (best-effort : n'interrompt jamais la requête).
export async function recordLogin(req: Request, data: LoginEventInput): Promise<void> {
  try {
    const ip = (req.ip ?? "").toString().slice(0, 64) || null;
    const userAgent = (req.headers["user-agent"] ?? "").toString().slice(0, 256) || null;
    await prisma.loginEvent.create({
      data: {
        userId: data.userId ?? null,
        username: data.username,
        success: data.success,
        kind: data.kind ?? "password",
        actor: data.actor ?? null,
        ip,
        userAgent,
      },
    });
  } catch (e) {
    console.warn("[audit] recordLogin échoué:", (e as Error).message);
  }
}
