import { createContext, useContext, useState, ReactNode } from "react"; import { userService } from "../api/userService"; interface AuthContextType { token: string | null; login: (username: string, password: string) => Promise; logout: () => void; isAuthenticated: () => boolean; } const AuthContext = createContext(undefined); interface AuthProviderProps { children: ReactNode; } export const AuthProvider = ({ children }: AuthProviderProps) => { const [token, setToken] = useState(localStorage.getItem("access_token")); const login = async (username: string, password: string) => { try { const data = await userService.login(username, password); setToken(data.access_token); localStorage.setItem("access_token", data.access_token); localStorage.setItem("refresh_token", data.refresh_token); return data; } catch (error) { console.error("Login failed:", error); throw error; } }; const logout = () => { setToken(null); localStorage.removeItem("access_token"); localStorage.removeItem("refresh_token"); }; const isAuthenticated = () => { return token !== null && token !== undefined && token !== ""; }; return ( {children} ); }; export const useAuth = () => { const context = useContext(AuthContext); if (context === undefined) { throw new Error("useAuth must be used within an AuthProvider"); } return context; };