/// Events, die der `KeycloakOidcTokenProvider` über seinen
/// Broadcast-Stream auswirft. Der AuthBloc abonniert diesen Stream
/// und reagiert mit eigenen Zustands-Übergängen.
///
/// Bewusst eigene Events (statt direkter Bloc-Aufrufe), damit der
/// Token-Provider keine Abhängigkeit auf die Bloc-Schicht braucht.
sealed class AuthSessionEvent {
  const AuthSessionEvent();
}

/// Erfolgreicher Login (frisch oder restauriert).
final class AuthLoggedIn extends AuthSessionEvent {
  const AuthLoggedIn(this.claims);
  final Map<String, dynamic> claims;
}

/// Sauberer Logout durch den Nutzer.
final class AuthLoggedOut extends AuthSessionEvent {
  const AuthLoggedOut();
}

/// Refresh fehlgeschlagen oder Server lehnt Token ab — die App muss
/// zurück zur Login-Page.
final class AuthSessionExpired extends AuthSessionEvent {
  const AuthSessionExpired();
}
