"use server";

import { fetchMutation } from "convex/nextjs";
import { api } from "../../../../convex/_generated/api";
import { m } from "@/lib/convex-server";
import { clientInfo } from "@/lib/auth";

/** Called by the sign-in form right after Convex Auth accepted the credentials. */
export async function recordLoginAction(): Promise<void> {
  try {
    const info = await clientInfo();
    await m(api.security.recordLogin, { client: { ip: info.ip, device: info.device, browser: info.browser, os: info.os, userAgent: info.ua ?? undefined } });
  } catch (e) {
    console.error("[login] could not record login", e);
  }
}

/** Unauthenticated bookkeeping of a failed attempt (throttled server-side). */
export async function recordFailedLoginAction(email: string, reason: string): Promise<void> {
  try {
    const info = await clientInfo();
    await fetchMutation(api.security.recordFailedLogin, { email, reason, client: { ip: info.ip, device: info.device, browser: info.browser, os: info.os, userAgent: info.ua ?? undefined } });
  } catch (e) {
    console.error("[login] could not record failure", e);
  }
}

/** Audit the sign-out before the client clears its Convex Auth session. */
export async function recordLogoutAction(): Promise<void> {
  try {
    await m(api.security.recordLogout, {});
  } catch {
    /* already signed out */
  }
}
