import { createContext, useContext, useState, useEffect, ReactNode } from "react"; import { jwtDecode } from "jwt-decode"; interface AuthContextType { token: string | null; username: string | null; role: string | null; isAdmin: boolean; login: (token: string) => void; logout: () => void; isAuthenticated: boolean; } const AuthContext = createContext({ token: null, username: null, role: null, isAdmin: false, login: () => {}, logout: () => {}, isAuthenticated: false, }); export const AuthProvider = ({ children }: { children: ReactNode }) => { const [token, setToken] = useState(null); const [username, setUsername] = useState(null); const [role, setRole] = useState(null); const isAdmin = role === "admin"; const isAuthenticated = !!token; useEffect(() => { const storedToken = localStorage.getItem("token"); if (storedToken) { setToken(storedToken); try { const decoded: any = jwtDecode(storedToken); setUsername(decoded.username); setRole(decoded.role); } catch (error) { console.error("Token konnte nicht gelesen werden"); } } }, []); const login = (newToken: string) => { localStorage.setItem("token", newToken); setToken(newToken); }; const logout = () => { localStorage.removeItem("token"); setToken(null); setUsername(null); setRole(null); }; return ( {children} ); }; export const useAuth = () => useContext(AuthContext);