import { useTabsStore } from "./tab";

export const useUserStore = defineStore(
  "user",
  () => {
    // 상태
    const isLoggedIn = ref(false);
    const user = ref<{
      userId?: string;
      name?: string;
    } | null>(null);
    const token = ref<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 = () => {
      user.value = null;
      isLoggedIn.value = false;

      // 권한 데이터 초기화
      permissionsStore.clearPermissions();
      // 탭 초기화
      tabsStore.resetTabs();

      useApi("/members/logout", { method: "post" });
    };

    const setToken = (accessToken: string) => {
      token.value = accessToken;
    };

    const getToken = () => {
      return token;
    };

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

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