import "server-only";
import { hash, verify } from "@node-rs/argon2";
import { ARGON2_OPTIONS } from "@/lib/auth/argon2-options";

/** Hash de contraseñas con Argon2id (algoritmo por defecto de @node-rs/argon2). */

export async function hashPassword(plain: string): Promise<string> {
  return hash(plain, ARGON2_OPTIONS);
}

export async function verifyPassword(passwordHash: string, plain: string): Promise<boolean> {
  try {
    return await verify(passwordHash, plain);
  } catch {
    // Hash corrupto o con formato inválido: se trata como contraseña incorrecta.
    return false;
  }
}

/**
 * Hash ficticio para igualar el tiempo de respuesta cuando el email no existe
 * (evita enumerar usuarios midiendo cuánto tarda el login).
 */
let dummyHashPromise: Promise<string> | undefined;
export function getDummyHash(): Promise<string> {
  dummyHashPromise ??= hashPassword("chesco-dummy-password-for-timing");
  return dummyHashPromise;
}
