import { useUserStore } from '#lib/stores' import { formatNumberWithCommas } from '#lib/utils' import { computed } from 'vue' import type { AppCookies, UserStore } from '#lib/types' import { useNuxtApp, useRuntimeConfig } from 'nuxt/app' /** * Custom composable function for managing user data. * @returns An object containing various computed properties related to the user. * @namespace */ export function useUser() { const store = useUserStore() const $appCookies = useNuxtApp().$appCookies as AppCookies const MAIN_CREDIT_UNIT = useRuntimeConfig().public.MAIN_CREDIT_UNIT /** * Computed property that returns the user's token. * @returns The user's token. */ const token = computed(() => { if (import.meta.client) { return store.data?.token } return $appCookies.token.value! }) /** * Computed property that returns the user's gpToken. * @returns The user's gpToken. */ const gpToken = computed(() => { if (import.meta.client) { return store.data?.gptoken } return $appCookies.gpToken.value! }) /** * Computed property that returns the user's gpMemberId. * @returns The user's gpMemberId. */ const gpMemberId = computed(() => { return user.value?.gpMemberId?.toString() ?? '' }) /** * Computed property that returns the user's memberId. * @returns The user's memberId. */ const memberId = computed(() => { return user.value?.member_id?.toString() ?? '' }) /** * Computed property that returns the user's denyGameIds. * @returns The user's denyGameIds. */ const denyGameIds = computed(() => { if (user.value?.deny_game_ids) { return user.value?.deny_game_ids } return [] }) /** * Computed property that returns whether the user is logged in or not. * @returns A boolean indicating if the user is logged in. */ const isLogged = computed(() => { return !!token.value }) /** * Computed property that returns the user object. * @returns The user object. */ const user = computed(() => { return store.data }) /** * Computed property that returns the total balance. * @returns The total balance. */ const totalBalance = computed(() => { return store.getTotalBalance() }) /** * Computed property that returns the sub balance. * @returns The sub balance. */ const balance = computed(() => { return store.getBalance() }) /** * Computed property that returns the formatted balance. * @returns The formatted balance. */ const formattedBalance = computed(() => { return `${formatNumberWithCommas(balance.value)} ${MAIN_CREDIT_UNIT}` }) return { token, gpToken, isLogged, user, totalBalance, denyGameIds, gpMemberId, memberId, formattedBalance, balance, } }