import type { DefaultSession, DefaultUser } from "next-auth";
import type { UserRole } from "@prisma/client";

// =====================================================================
// Type-Augmentation für NextAuth (Auth.js v5)
// ---------------------------------------------------------------------
// Erzwingt zur Compile-Zeit, dass `id`, `role` und `kitaId` in
// `Session.user` und im JWT verfügbar sind. `familyId` transportiert den
// optionalen Haushalt fuer Eltern- und Notdienst-Flows. Damit ist die
// Mandanten-Isolation auf Typ-Ebene abgesichert: Jede Server Action /
// Server Component, die `session.user.kitaId` nutzt, scheitert beim
// Build, falls die Eigenschaft je entfernt wird.
// =====================================================================

declare module "next-auth" {
  interface User extends DefaultUser {
    id: string;
    role: UserRole;
    kitaId: string | null;
    familyId: string | null;
  }

  interface Session {
    user: {
      id: string;
      role: UserRole;
      kitaId: string | null;
      familyId: string | null;
    } & DefaultSession["user"];
  }
}

// NextAuth v5 re-exportiert die JWT-Typen aus `@auth/core/jwt`.
// Module-Augmentation muss daher dort ansetzen — `next-auth/jwt` würde
// ignoriert.
declare module "@auth/core/jwt" {
  interface JWT {
    id: string;
    role: UserRole;
    kitaId: string | null;
    familyId: string | null;
  }
}
