import type { NextAuthConfig } from "next-auth";
import Authentik from "next-auth/providers/authentik";
import { isHttps } from "@/lib/env";

/**
 * Edge-sichere Auth-Konfiguration. Dieses Modul wird auch in der Middleware
 * (Edge-Runtime) verwendet und darf daher WEDER `@/db` NOCH `@node-rs/argon2`
 * importieren (siehe Verifikation Workstream 3, Schritt 2).
 *
 * Cookie-`secure` und `__Secure-`-Präfix sind umgebungsabhängig (`isHttps`),
 * damit lokale HTTP-Entwicklung nicht bricht (Querschnittsstandard 9).
 */
export const authConfig = {
  trustHost: true,
  pages: { signIn: "/login", error: "/login" },
  session: { strategy: "jwt", maxAge: 60 * 60 * 8 },
  cookies: {
    sessionToken: {
      name: isHttps ? "__Secure-floriannetz.session" : "floriannetz.session",
      options: {
        httpOnly: true,
        sameSite: "lax",
        path: "/",
        secure: isHttps,
      },
    },
  },
  providers: [
    Authentik({
      issuer: process.env.AUTHENTIK_ISSUER!,
      clientId: process.env.AUTHENTIK_CLIENT_ID!,
      clientSecret: process.env.AUTHENTIK_CLIENT_SECRET!,
    }),
  ],
  callbacks: {
    authorized: ({ auth }) => !!auth?.user,
    async jwt({ token, user }) {
      if (user) {
        token.role = user.role;
        token.brigadeId = user.brigadeId ?? null;
      }
      return token;
    },
    async session({ session, token }) {
      session.user.role = token.role;
      session.user.brigadeId = token.brigadeId ?? null;
      return session;
    },
  },
} satisfies NextAuthConfig;
