'use client'; import React, { createContext, useState, useContext, useEffect } from 'react'; export type User = { id: number; username: string; avatar?: string; banner_file?: string; premium?: boolean; is_banned?: boolean; is_moderator?: boolean; }; interface AuthContextType { user: User | null; setUser: (user: User | null) => void; logout: () => void; } const AuthContext = createContext(null); const API_URL = process.env.NEXT_PUBLIC_API_URL; export const AuthContextProvider = ({ children }: React.PropsWithChildren) => { const [user, setUser] = useState(null); useEffect(() => { const fetchUser = async () => { const hasCookies = document.cookie.includes('access_token'); if (!hasCookies) return; try { const res = await fetch(`${API_URL}/api/me`, { credentials: 'include', }); if (!res.ok) return; const userData = await res.json(); setUser(userData); } catch {} }; fetchUser(); }, []); const logout = async () => { await fetch(`${API_URL}/api/auth/logout`, { method: 'POST', credentials: 'include', }); setUser(null); }; return ( {children} ); }; export const useAuthContext = () => { const context = useContext(AuthContext); if (!context) throw new Error( 'useAuthContext must be used within AuthContextProvider', ); return context; }; export const useUser = () => useAuthContext().user; export const useLogout = () => useAuthContext().logout;