import { useState, useEffect, useContext, createContext } from 'react'; // Define the user data type interface UserData { userId?: number; username?: string; employeeId?: number; firstName?: string; lastName?: string; email?: string; role?: string; } // Define the auth context type interface AuthContextType { isAuthenticated: boolean; userData: UserData | null; login: (user: UserData) => void; logout: () => void; } // Create the auth context with default values const AuthContext = createContext({ isAuthenticated: false, userData: null, login: () => {}, logout: () => {} }); // Auth provider component export const AuthProvider = ({ children }: { children: React.ReactNode }) => { const [isAuthenticated, setIsAuthenticated] = useState(false); const [userData, setUserData] = useState(null); // Check for existing auth on mount useEffect(() => { const storedUser = localStorage.getItem('user'); if (storedUser) { try { const parsedUser = JSON.parse(storedUser); setUserData(parsedUser); setIsAuthenticated(true); } catch (error) { console.error('Error parsing stored user data:', error); localStorage.removeItem('user'); } } }, []); // Login function const login = (user: UserData) => { setUserData(user); setIsAuthenticated(true); localStorage.setItem('user', JSON.stringify(user)); }; // Logout function const logout = () => { setUserData(null); setIsAuthenticated(false); localStorage.removeItem('user'); }; return ( {children} ); }; // Custom hook to use the auth context export const useAuth = () => { return useContext(AuthContext); }; export default useAuth;