import React, { createContext, useContext, useState, useEffect, useCallback } from 'react' import { AppUser } from '@/types' interface AppContextValue { user: AppUser | null loading: boolean login: (email: string, password: string) => Promise logout: () => Promise refreshUser: () => Promise } const AppContext = createContext({} as AppContextValue) export function AppProvider({ children }: { children: React.ReactNode }) { const [user, setUser] = useState(null) const [loading, setLoading] = useState(true) const refreshUser = useCallback(async () => { try { const res = await fetch('/api/auth/me') if (res.ok) { const { user } = await res.json() setUser(user) } else { setUser(null) } } catch { setUser(null) } }, []) useEffect(() => { refreshUser().finally(() => setLoading(false)) }, [refreshUser]) const login = async (email: string, password: string): Promise => { const res = await fetch('/api/auth/login', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ email, password }), }) const data = await res.json() if (res.ok) { setUser(data.user) return null } return data.error || 'Login failed' } const logout = async () => { await fetch('/api/auth/me', { method: 'DELETE' }) setUser(null) } return ( {children} ) } export const useApp = () => useContext(AppContext)