import React, { createContext, useContext, useState, useEffect, ReactNode } from 'react'; import { User, UserRole } from '../types'; import { findUserByEmail } from '../data/mockData'; interface AuthContextType { user: User | null; loading: boolean; login: (email: string, password: string) => Promise; logout: () => void; isRole: (role: UserRole) => boolean; } const AuthContext = createContext(undefined); interface AuthProviderProps { children: ReactNode; } export const AuthProvider: React.FC = ({ children }) => { const [user, setUser] = useState(null); const [loading, setLoading] = useState(true); useEffect(() => { // Check if user is stored in localStorage const storedUser = localStorage.getItem('user'); if (storedUser) { setUser(JSON.parse(storedUser)); } setLoading(false); }, []); const login = async (email: string, password: string) => { // In a real app, this would make an API call // For this demo, we'll use mock data setLoading(true); // Simulate API delay await new Promise(resolve => setTimeout(resolve, 500)); const foundUser = findUserByEmail(email); if (foundUser) { // In a real app, we would verify the password here setUser(foundUser); localStorage.setItem('user', JSON.stringify(foundUser)); } else { throw new Error('Invalid credentials'); } setLoading(false); }; const logout = () => { setUser(null); localStorage.removeItem('user'); }; const isRole = (role: UserRole) => { return user?.role === role; }; return ( {children} ); }; export const useAuth = () => { const context = useContext(AuthContext); if (context === undefined) { throw new Error('useAuth must be used within an AuthProvider'); } return context; };