import { useTabsStore } from "./tab";

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

    // 권한 스토어 참조
    const permissionsStore = usePermissionsStore();
    // 탭 스토어 참조
    const tabsStore = useTabsStore();

    interface LoginData {
      userId: string;
      name: string;
    }

    const login = async (userId: string, password: string) => {
      const { success, data, description } = await useApi<
        ApiResponse<LoginData>
      >("/login", {
        method: "post",
        body: { userId, password },
      });

      if (success) {
        user.value = data;
        isLoggedIn.value = true;

        // 로그인 성공 시
        // 탭 초기화
        tabsStore.resetTabs();
        // 권한 데이터 가져오기
        await permissionsStore.fetchPermissions();

        return { success, data };
      } else {
        return {
          success: false,
          error: description,
        };
      }
    };

    const logout = async () => {
      await useApi("/members/logout", {
        method: "post",
        loadingMessage: "로그아웃 처리중...",
        showAlert: false,
      });

      user.value = null;
      isLoggedIn.value = false;

      tabsStore.resetTabs();
      permissionsStore.clearPermissions();

      await navigateTo("/login");
    };

    return {
      // 상태
      isLoggedIn,
      user,

      // 액션
      login,
      logout,
    };
  },
  {
    persist: true,
  }
);
