import { createContext, useContext, useState, useCallback } from 'react';
import { authService } from '@services/auth';
import { storage } from '@utils/storage';
const AuthContext = createContext(null);
export function AuthProvider({ children }) {
const [user, setUser] = useState(() => storage.get('user'));
const [loading, setLoading] = useState(false);
const [error, setError] = useState(null);
const login = useCallback(async (credentials) => {
setLoading(true);
setError(null);
try {
const userData = await authService.login(credentials);
setUser(userData);
storage.set('user', userData);
return userData;
} catch (err) {
setError(err.message);
throw err;
} finally {
setLoading(false);
}
}, []);
const logout = useCallback(async () => {
setLoading(true);
try {
await authService.logout();
setUser(null);
storage.remove('user');
} finally {
setLoading(false);
}
}, []);
const value = {
user,
loading,
error,
login,
logout,
isAuthenticated: !!user,
};
return <AuthContext.Provider value={value}>{children}</AuthContext.Provider>;
}
export function useAuth() {
const context = useContext(AuthContext);
if (!context) {
throw new Error('useAuth must be used within an AuthProvider');
}
return context;
}