"use client"; import React, { createContext, useContext, useState, useEffect, ReactNode } from "react"; import { getToken } from "@/lib/api"; import * as authApi from "@/lib/api/auth"; export type UserProfile = authApi.UserProfile; interface AuthContextType { user: UserProfile | null; isLoading: boolean; isAdmin: boolean; login: (email: string, password: string) => Promise; register: (email: string, password: string, name: string) => Promise; logout: () => void; } const AuthContext = createContext(undefined); export const AuthProvider = ({ children }: { children: ReactNode }) => { const [user, setUser] = useState(null); const [isLoading, setIsLoading] = useState(true); useEffect(() => { const token = getToken(); if (!token) { setIsLoading(false); return; } authApi.getMe() .then(setUser) .catch(() => authApi.logout()) .finally(() => setIsLoading(false)); }, []); const login = async (email: string, password: string): Promise => { const profile = await authApi.login(email, password); setUser(profile); return profile; }; const register = async (email: string, password: string, name: string): Promise => { const profile = await authApi.register(email, password, name); setUser(profile); return profile; }; const logout = () => { authApi.logout(); setUser(null); }; return ( {children} ); }; export const useAuth = () => { const ctx = useContext(AuthContext); if (!ctx) throw new Error("useAuth must be used within AuthProvider"); return ctx; };