'use client'; import { create } from 'zustand'; import { api, getToken, setToken, clearToken } from './api'; interface AuthUser { id?: number; username: string; role: string; created_at?: string; last_login_at?: string; } interface AuthState { user: AuthUser | null; loading: boolean; error: string | null; login: (u: string, p: string) => Promise; logout: () => void; fetchMe: () => Promise; } export const useAuth = create((set) => ({ user: null, loading: false, error: null, async login(u, p) { set({ loading: true, error: null }); try { const r = await api.post<{ access_token: string; user: AuthUser }>('/api/auth/login', { username: u, password: p }); setToken(r.access_token); set({ user: r.user, loading: false }); return true; } catch (e: any) { set({ error: e?.message || '로그인 실패', loading: false }); return false; } }, logout() { clearToken(); set({ user: null }); if (typeof window !== 'undefined') window.location.href = '/login'; }, async fetchMe() { if (!getToken()) { set({ user: null }); return; } try { const me = await api.get('/api/auth/me'); set({ user: me }); } catch { clearToken(); set({ user: null }); } }, }));