export const useUserStore = defineStore("user", () => {
  // 상태
  const isLoggedIn = ref(false);
  const user = ref<{
    id?: string;
    userId?: string;
    email?: string;
    name?: string;
    role?: string;
  } | null>(null);
  const token = ref<string | null>(null);


  interface LoginData {
    userId: string
    role: string
    lastLoginAt: string
  }

  // 게터
  const isAdmin = computed(() => user.value?.role === "admin");
  const userName = computed(() => user.value?.name || "사용자");
  // 액션
  const login = async (userId: string, password: string) => {
    try {
      // 실제 API 호출로 대체할 수 있습니다
      
      const {data, error: _error } = await useApi<ApiResponse<LoginData>>('/login', {
        method: 'post',
        body: { userId, password }
      })     
     
      let mockUser;

      if(data && data.value && data.value.success){
        mockUser = data.value.data;
      }else{
        throw new Error("아이디 또는 비밀번호가 올바르지 않습니다.");
      }

      user.value = mockUser;
      token.value = "mock-token-" + Date.now();
      isLoggedIn.value = true;

      // 로컬 스토리지에 저장
      localStorage.setItem("user", JSON.stringify(mockUser));
      localStorage.setItem("token", token.value);

      return { success: true, user: mockUser };
    } catch (error) {
      console.error("로그인 실패:", error);
      return {
        success: false,
        error:
          error instanceof Error ? error.message : "로그인에 실패했습니다.",
      };
    }
  };

  const logout = () => {
    user.value = null;
    token.value = null;
    isLoggedIn.value = false;

    // 로컬 스토리지에서 제거
    localStorage.removeItem("user");
    localStorage.removeItem("token");
  };

  const checkAuth = () => {
    // 페이지 로드 시 로컬 스토리지에서 사용자 정보 복원
    const savedUser = localStorage.getItem("user");
    const savedToken = localStorage.getItem("token");

    if (savedUser && savedToken) {
      user.value = JSON.parse(savedUser);
      token.value = savedToken;
      isLoggedIn.value = true;
    }
  };

  // 초기 인증 상태 확인
  if (import.meta.client) {
    checkAuth();
  }

  return {
    // 상태
    isLoggedIn,
    user,
    token,

    // 게터
    isAdmin,
    userName,

    // 액션
    login,
    logout,
    checkAuth,
  };
});
