import type { NextAuthConfig } from "next-auth";

// ──────────────────────────────────────────────────────────────────────────
// Edge-sichere Basis-Konfiguration (KEIN Prisma / kein Argon2-Import).
// Wird von der Middleware genutzt; auth.ts erweitert sie um den Credentials-
// Provider (nur Node-Runtime). jwt/session-Callbacks sind reine Kopierer und
// damit edge-tauglich — die DB-Last entsteht ausschließlich in authorize().
// ──────────────────────────────────────────────────────────────────────────

export const authConfig = {
  trustHost: true,
  pages: {
    signIn: "/login",
    error: "/login",
  },
  session: {
    strategy: "jwt",
    maxAge: Number(process.env.SESSION_MAX_AGE ?? 28800), // Default 8h
  },
  providers: [], // wird in auth.ts gesetzt
  callbacks: {
    jwt({ token, user, trigger, session }) {
      if (user) {
        // authorize() liefert diese Felder; Cast wegen der breiten User-Union.
        const u = user as {
          id?: string;
          roles?: string[];
          permissions?: string[];
          status?: string;
        };
        token.id = u.id ?? token.id;
        token.roles = u.roles ?? [];
        token.permissions = u.permissions ?? [];
        token.status = u.status ?? "ACTIVE";
      }
      // Erlaubt das Auffrischen via session.update() (z. B. nach Profiländerung)
      if (trigger === "update" && session?.user?.name) {
        token.name = session.user.name;
      }
      return token;
    },
    session({ session, token }) {
      const t = token as {
        id?: string;
        roles?: string[];
        permissions?: string[];
        status?: string;
      };
      if (session.user) {
        session.user.id = t.id ?? "";
        session.user.roles = t.roles ?? [];
        session.user.permissions = t.permissions ?? [];
        session.user.status = t.status ?? "ACTIVE";
      }
      return session;
    },
  },
} satisfies NextAuthConfig;
