typescript import React, { createContext, useContext, useState, useEffect, ReactNode } from 'react' interface User { id: string name: string email: string role: string avatar?: string } interface AuthContextType { user: User | null login: (email: string, password: string) => Promise logout: () => void isLoading: boolean } const AuthContext = createContext(undefined) export const useAuth = () => { const context = useContext(AuthContext) if (context === undefined) { throw new Error('useAuth must be used within an AuthProvider') } return context } interface AuthProviderProps { children: ReactNode } export const AuthProvider: React.FC = ({ children }) => { const [user, setUser] = useState(null) const [isLoading, setIsLoading] = useState(true) useEffect(() => { // Check for stored auth token on app load const token = localStorage.getItem('auth_token') if (token) { // Mock user data - in real app, verify token with backend setUser({ id: '1', name: 'John Doe', email: 'john.doe@company.com', role: 'admin' }) } setIsLoading(false) }, []) const login = async (email: string, password: string): Promise => { setIsLoading(true) try { // Mock API call await new Promise(resolve => setTimeout(resolve, 1000)) if (email === 'admin@mapit.com' && password === 'password') { const userData: User = { id: '1', name: 'John Doe', email: email, role: 'admin' } setUser(userData) localStorage.setItem('auth_token', 'mock_jwt_token') } else { throw new Error('Invalid credentials') } } finally { setIsLoading(false) } } const logout = () => { setUser(null) localStorage.removeItem('auth_token') } return ( {children} ) }