"use client"; import { createContext, useContext, useState, useEffect } from "react"; import { useRouter } from "next/navigation"; interface User { email: string; username?: string; } interface AuthContextType { user: User | null; token: string | null; login: (token: string, user: User) => void; logout: () => void; isAuthenticated: boolean; } const AuthContext = createContext(undefined); export function AuthProvider({ children }: { children: React.ReactNode }) { const [user, setUser] = useState(null); const [token, setToken] = useState(null); const router = useRouter(); useEffect(() => { const storedToken = localStorage.getItem("token"); const storedUser = localStorage.getItem("user"); if (storedToken && storedUser) { setToken(storedToken); setUser(JSON.parse(storedUser)); } }, []); const login = (newToken: string, newUser: User) => { localStorage.setItem("token", newToken); localStorage.setItem("user", JSON.stringify(newUser)); document.cookie = `token=${newToken}; path=/; max-age=${60 * 60 * 24 * 7}`; // 7 days setToken(newToken); setUser(newUser); router.push("/"); }; const logout = () => { localStorage.removeItem("token"); localStorage.removeItem("user"); document.cookie = "token=; path=/; max-age=0"; setToken(null); setUser(null); router.push("/login"); }; return ( {children} ); } export function useAuth() { const context = useContext(AuthContext); if (!context) { throw new Error("useAuth must be used within AuthProvider"); } return context; }