/**
 * 인증 전역 상태 (Zustand) — 토큰/사용자, 자동 로그인 (PRD C-06)
 * 사용자 객체도 localStorage에 영속화해 페이지 새로고침 후에도 유지된다.
 * (최신성은 App 부트스트랩에서 GET /api/profile로 갱신)
 */
import { create } from 'zustand';
import { clearTokens, getStoredTokens, storeTokens } from '../lib/api';

export interface User {
  id: number;
  email: string;
  name: string;
  nickname?: string | null;
  dateOfBirth?: string | null;
  gender?: string | null;
  country?: string | null;
  loginProvider: string;
  isActivate: boolean;
}

const USER_KEY = 'pcnt_user';

function loadUser(): User | null {
  try {
    const raw = localStorage.getItem(USER_KEY);
    return raw ? (JSON.parse(raw) as User) : null;
  } catch {
    return null;
  }
}

function saveUser(user: User | null) {
  if (user) localStorage.setItem(USER_KEY, JSON.stringify(user));
  else localStorage.removeItem(USER_KEY);
}

interface AuthState {
  accessToken: string | null;
  user: User | null;
  setAuth: (access: string, refresh: string | null, user: User) => void;
  setUser: (user: User) => void;
  logout: () => void;
}

export const useAuthStore = create<AuthState>((set) => ({
  accessToken: getStoredTokens().access,
  user: loadUser(),
  setAuth: (access, refresh, user) => {
    console.log('[AUTH] setAuth called, access length:', access?.length, 'refresh length:', refresh?.length);
    storeTokens(access, refresh ?? undefined);
    saveUser(user);
    set({ accessToken: access, user });
  },
  setUser: (user) => {
    saveUser(user);
    set({ user });
  },
  logout: () => {
    console.log('[AUTH] logout');
    clearTokens();
    saveUser(null);
    set({ accessToken: null, user: null });
  },
}));
