// lib/server/auth-utils.ts (o directamente en lib/auth.ts si prefieres)
import { redirect } from "next/navigation"
import type { Session } from "next-auth"

import { auth } from "@/lib/auth" // Asegúrate de que tu instancia de auth de Auth.js se exporte desde aquí

/**
 * Obtiene la sesión del usuario. Si no está autenticado, redirige a la página de inicio de sesión.
 * @returns La sesión del usuario autenticado.
 * @throws Error si la sesión no es válida (aunque debería redirigir antes).
 */
export async function getAuthenticatedSession(): Promise<Session> {
  const session = await auth()

  if (!session || !session.user || !session.user.id) {
    // Redirige a la página de login. Puedes personalizar la URL.
    // También puedes lanzar un error si prefieres que el Server Action lo capture.
    redirect("/login") // O throw new Error("Unauthorized");
  }

  // Si necesitas asegurar que ciertos campos existen o que la sesión sea de un tipo específico
  return session as Session
}

/**
 * Obtiene el ID del usuario autenticado. Si no está autenticado, redirige a la página de inicio de sesión.
 * @returns El ID del usuario.
 */
export async function getAuthenticatedUserId(): Promise<string> {
  const session = await getAuthenticatedSession()
  return session.user.id
}

/**
 * Verifica si el usuario tiene un rol específico.
 * @param requiredRole El rol requerido.
 * @throws Error si el usuario no tiene el rol.
 */
export async function verifyUserRole(
  requiredRole: "ADMIN" | "USER",
): Promise<void> {
  const session = await getAuthenticatedSession()
  if (session.user.role !== requiredRole) {
    throw new Error("Forbidden: Insufficient permissions.") // O redirigir a una página de acceso denegado
  }
}
