import "server-only";
import { prisma } from "@/lib/prisma";

export type UserAuthData = {
  roles: string[];
  permissions: string[];
};

/**
 * Lädt Rollen-Keys und die daraus resultierenden Berechtigungen eines Nutzers
 * aus der Datenbank. Wird beim Login (authorize) aufgerufen und das Ergebnis
 * im JWT abgelegt — so sind Laufzeit-Checks ohne weitere DB-Abfragen möglich.
 */
export async function loadUserAuthData(userId: string): Promise<UserAuthData> {
  const userRoles = await prisma.userRole.findMany({
    where: { userId },
    select: {
      role: {
        select: {
          key: true,
          permissions: { select: { permission: { select: { key: true } } } },
        },
      },
    },
  });

  const roles = new Set<string>();
  const permissions = new Set<string>();

  for (const ur of userRoles) {
    roles.add(ur.role.key);
    for (const rp of ur.role.permissions) {
      permissions.add(rp.permission.key);
    }
  }

  return { roles: [...roles], permissions: [...permissions] };
}
