'use client'; import { createContext, useContext, useEffect, useState, ReactNode } from 'react'; import { useRouter } from 'next/navigation'; import { authApi, userApi } from '@/lib/api'; interface User { ID: number; Name: string; Email: string; } interface AuthContextType { user: User | null; isLoading: boolean; isAuthenticated: boolean; login: (email: string, password: string) => Promise; signup: (name: string, email: string, password: string) => Promise; logout: () => void; } const AuthContext = createContext(null); export function AuthProvider({ children }: { children: ReactNode }) { const [user, setUser] = useState(null); const [isLoading, setIsLoading] = useState(true); const router = useRouter(); // Check if the user is already logged in useEffect(() => { const checkAuth = async () => { const token = localStorage.getItem('token'); if (!token) { setIsLoading(false); return; } try { const userData = await userApi.getProfile(); setUser(userData); } catch (error) { // Clear invalid token localStorage.removeItem('token'); } finally { setIsLoading(false); } }; checkAuth(); }, []); // Login function const login = async (email: string, password: string) => { const response = await authApi.login(email, password); setUser(response.user); return response; }; // Signup function const signup = async (name: string, email: string, password: string) => { return await authApi.signup(name, email, password); }; // Logout function const logout = () => { authApi.logout(); setUser(null); }; return ( {children} ); } export function useAuth() { const context = useContext(AuthContext); if (!context) { throw new Error('useAuth must be used within an AuthProvider'); } return context; }