import { createContext, useContext, useState, useEffect, useCallback, ReactNode } from "react"; import { authService } from "@/services/auth.service"; import { clearToken } from "@/lib/api-client"; import type { User, UserRole } from "@/types/auth"; export type { UserRole }; interface AuthContextType { user: User | null; isAuthenticated: boolean; isLoading: boolean; login: (email: string, password: string) => Promise; logout: () => Promise; } const AuthContext = createContext(undefined); export function AuthProvider({ children }: { children: ReactNode }) { const [user, setUser] = useState(null); const [isLoading, setIsLoading] = useState(true); useEffect(() => { const token = localStorage.getItem("encoach_token"); if (!token) { setIsLoading(false); return; } authService .getUser() .then(setUser) .catch(() => { clearToken(); }) .finally(() => setIsLoading(false)); }, []); const login = useCallback(async (email: string, password: string): Promise => { const res = await authService.login({ login: email, password }); setUser(res.user); return res.user; }, []); const logout = useCallback(async () => { await authService.logout(); setUser(null); }, []); return ( {children} ); } export function useAuth() { const ctx = useContext(AuthContext); if (!ctx) throw new Error("useAuth must be used within AuthProvider"); return ctx; }