import { useThemeData, useThemeLocaleData } from '@theme/useThemeData';
import { useRoutePaths } from '@vuepress/helper/client';
import { computed } from 'vue';
import { useRoute, useRouteLocale, useSiteData, useSiteLocaleData, } from 'vuepress/client';
/**
 * Get navbar config of select language dropdown
 */
export const useNavbarSelectLanguage = () => {
    const route = useRoute();
    const routePaths = useRoutePaths();
    const routeLocale = useRouteLocale();
    const site = useSiteData();
    const siteLocale = useSiteLocaleData();
    const theme = useThemeData();
    const themeLocale = useThemeLocaleData();
    return computed(() => {
        const localePaths = Object.keys(site.value.locales);
        // do not display language selection dropdown if there is only one language
        if (localePaths.length < 2) {
            return [];
        }
        const currentPath = route.path;
        const currentFullPath = route.fullPath;
        const languageDropdown = {
            text: `${themeLocale.value.selectLanguageText}`,
            ariaLabel: `${themeLocale.value.selectLanguageAriaLabel ??
                themeLocale.value.selectLanguageText}`,
            children: localePaths.map((targetLocalePath) => {
                // target locale config of this language link
                const targetSiteLocale = site.value.locales?.[targetLocalePath] ?? {};
                const targetThemeLocale = theme.value.locales?.[targetLocalePath] ?? {};
                const targetLang = `${targetSiteLocale.lang}`;
                const text = targetThemeLocale.selectLanguageName ?? targetLang;
                // if the target language is current language
                // stay at current link
                if (targetLang === siteLocale.value.lang) {
                    return {
                        text,
                        activeMatch: '.',
                        link: route.fullPath,
                    };
                }
                // if the target language is not current language
                // try to link to the corresponding page of current page
                // or fallback to homepage
                const targetLocalePage = currentPath.replace(routeLocale.value, targetLocalePath);
                return {
                    text,
                    // try to keep current hash and params across languages
                    link: routePaths.value.some((item) => item === targetLocalePage)
                        ? currentFullPath.replace(currentPath, targetLocalePage)
                        : (targetThemeLocale.home ?? targetLocalePath),
                };
            }),
        };
        return [languageDropdown];
    });
};
