"use client"; import { createContext, useContext, useState, useEffect, useCallback, type ReactNode, } from "react"; import { api } from "./api"; import type { User, LoginRequest, RegisterRequest } from "@/types/api"; interface AuthContextType { user: User | null; loading: boolean; login: (data: LoginRequest) => Promise; register: (data: RegisterRequest) => Promise; logout: () => void; isAuthenticated: boolean; } const AuthContext = createContext(undefined); export function AuthProvider({ children }: { children: ReactNode }) { const [user, setUser] = useState(null); const [loading, setLoading] = useState(true); useEffect(() => { const token = api.getToken(); if (token) { // Token exists, user is authenticated // In a real app, you might validate the token or fetch user data setUser({ id: "", email: "" }); } setLoading(false); }, []); const login = useCallback(async (data: LoginRequest) => { const response = await api.login(data); setUser(response.user); }, []); const register = useCallback(async (data: RegisterRequest) => { const response = await api.register(data); setUser(response.user); }, []); const logout = useCallback(() => { api.logout(); setUser(null); }, []); return ( {children} ); } export function useAuth() { const context = useContext(AuthContext); if (context === undefined) { throw new Error("useAuth must be used within an AuthProvider"); } return context; }