import { history } from 'umi';

/**
 * 重定向的方法
 * @description 如果是登录页, url上有redirect参数则跳转到redirect参数, 同时要考虑redirect的有效性,
 * 没有就跳第一个有效路由; 非登录页, 看该页面的路由是否有效, 有效就跳转,
 * 无效就看是否有子路由, 有就跳它的第一个子路由, 也就是看这个路由是不是有子路由, 是在Menu中可展开的形式,
 * 没有也跳, 此时就交由umi处理404的情况
 * @param isLoginPage 是否是登录页
 * @param indexAllMenuItemByPath IndexAllMenuItemByKey<'path'>
 * @param indexValidMenuItemByPath IndexValidMenuItemByPath
 * @returns Promise<boolean>
 */
const handleRedirect = (
  isLoginPage: boolean,
  indexAllMenuItemByPath: IndexAllMenuItemByKey<'path'>,
  indexValidMenuItemByPath: IndexValidMenuItemByPath,
): Promise<boolean> => (
  new Promise((resolve) => {
    let routePath = ''
    const queryString = window.location.search;

    let {
      location: { search, pathname },
    } = window;
    if (pathname.indexOf('/cloudMenu') !== -1) {
      pathname = pathname.split('/cloudMenu')[1]
    }
    routePath = `${pathname}${search}`;


    // Object.keys(indexValidMenuItemByPath)[0];
    // if (isLoginPage) {
    //   const queryString = window.location.search;
    //   if (queryString) {
    //     const matchedRes = queryString.match(/redirect=(.*)/);

    //     if (matchedRes) {
    //       //还要考虑redirect参数是否有效
    //       let decodeRedirect = decodeURIComponent(matchedRes[1]);
    //       if (decodeRedirect.indexOf('/cloudMenu') !== -1) {
    //         decodeRedirect = decodeRedirect.split('/cloudMenu')[1]
    //       }

    //       // 处理可能存在的路径问题，确保路径格式正确
    //       // 移除可能的重复前缀
    //       if (decodeRedirect.startsWith('/') && decodeRedirect.indexOf('/', 1) !== -1) {

    //         const firstSlashAfterRoot = decodeRedirect.indexOf('/', 1);
    //         const possiblePrefix = decodeRedirect.substring(0, firstSlashAfterRoot);
    //         // 检查是否有重复的路径前缀
    //         if (decodeRedirect.indexOf(possiblePrefix, firstSlashAfterRoot) === firstSlashAfterRoot) {
    //           decodeRedirect = decodeRedirect.substring(firstSlashAfterRoot);
    //         }
    //       }

    //       // 避免重定向到登录页面本身
    //       if (decodeRedirect === '/user/login' || decodeRedirect.startsWith('/user/login?')) {
    //         // 如果重定向目标是登录页面，则使用默认路由
    //         routePath = Object.keys(indexValidMenuItemByPath)[0];
    //       }
    //       //有效: 跳转
    //       else if (indexValidMenuItemByPath[decodeRedirect]) {
    //         routePath = decodeRedirect;
    //       } else if (indexAllMenuItemByPath[decodeRedirect]) {
    //         //无效
    //         //有子路由: 跳子路由
    //         routePath = indexAllMenuItemByPath[decodeRedirect].redirect;
    //       } else {

    //         //无子路由: 还是要跳, 此时就是交由umi处理404的情况了
    //         if (decodeRedirect === '/cloudMenu/') {
    //           routePath = ''
    //         } else {
    //           routePath = decodeRedirect;
    //         }
    //       }
    //     }
    //   }
    // } else {
    //   let {
    //     location: { search, pathname },
    //   } = window;
    //   if (pathname.indexOf('/cloudMenu') !== -1) {
    //     pathname = pathname.split('/cloudMenu')[1]
    //   }

    //   //考虑url上有查询字符串参数的情况
    //   //有效
    //   if (indexValidMenuItemByPath[pathname]) {
    //     routePath = `${pathname}${search}`;
    //   } else if (indexAllMenuItemByPath[pathname]) {
    //     //无效
    //     //有子路由: 跳子路由
    //     routePath = `${indexAllMenuItemByPath[pathname].redirect}${search}`;
    //   } else {
    //     //无子路由: 也跳, 此时交由umi处理404的情况
    //     routePath = `${pathname}${search}`;
    //   }
    // }

    history.push(routePath);

    return resolve(true);
  })
);

export default handleRedirect;
