import { getSession } from '@zen/core/features/auth/actions';
import { hasPermission, PERMISSIONS } from '@zen/core/users';
import { redirect } from 'next/navigation';

/**
 * Protect an admin page - requires authentication and admin.access permission.
 * Use this in server components to require admin access.
 */
async function protectAdmin(options = {}) {
  const { redirectTo = '/auth/login', forbiddenRedirect = '/' } = options;

  const session = await getSession();

  if (!session) {
    redirect(redirectTo);
  }

  const allowed = await hasPermission(session.user.id, PERMISSIONS.ADMIN_ACCESS);
  if (!allowed) {
    redirect(forbiddenRedirect);
  }

  return session;
}

/**
 * Check if the current user has admin.access permission.
 * Non-redirecting check for conditional rendering.
 */
async function isAdmin() {
  const session = await getSession();
  if (!session) return false;
  return hasPermission(session.user.id, PERMISSIONS.ADMIN_ACCESS);
}

export { protectAdmin, isAdmin };
