import i18next from 'i18next';
import { matchPath } from 'react-router-dom';

import { APP_ROUTE_METAS } from '@/defines/appRoutes';

/**
 * path → locale 映射数据源为 defines/appRoutes.ts 的 APP_ROUTE_METAS（纯数据，不 import 组件），
 * 而非旧的 router/routes.tsx。这样 titles.ts 不再牵出
 * routes.tsx → BasicLayout → Topbar → useService 的循环依赖。
 *
 * APP_ROUTE_METAS 的 path 不含前导斜杠，这里归一为以 '/' 开头，与 pathname 匹配。
 */
const routeLocaleList: Array<{ path: string; locale: string }> = APP_ROUTE_METAS.map((meta) => ({
    path: `/${meta.path}`,
    locale: meta.locale,
}));

/**
 * 根据路径获取 locale key
 * @param pathname 路由路径
 * @returns locale key
 */
export const getLocaleByPath = (pathname: string): string => {
    // 按路径长度降序，优先匹配更具体的路由
    const matchedRoute = routeLocaleList
        .filter((route) => matchPath({ path: route.path, end: false }, pathname) !== null)
        .sort((a, b) => b.path.length - a.path.length)[0];

    if (matchedRoute) {
        return matchedRoute.locale;
    }

    // 找不到对应路由时，将路径转换为 i18n key
    return `menus.${pathname.slice(1).replace(/\//g, '.')}`;
};

/**
 * 获取路由路径对应的标题
 * @param pathname 路由路径
 * @returns 路由标题
 */
export const getTitleByPath = (pathname: string): string => {
    const locale = getLocaleByPath(pathname);
    return i18next.t(locale, { defaultValue: '' });
};
