import type { CustomRoute, ElegantConstRoute, ElegantRoute } from '@elegant-router/types';
import { generatedRoutes } from '../elegant/routes';
import { layouts, views } from '../elegant/imports';
import { transformElegantRoutesToVueRoutes } from '../elegant/transform';

/**
 * custom routes
 *
 * @link https://github.com/soybeanjs/elegant-router?tab=readme-ov-file#custom-route
 */
const customRoutes: CustomRoute[] = [
  {
    name: 'alarmcenter',
    path: '/alarmcenter',
    component: 'layout.base',
    meta: {
      title: 'alarmcenter',
      i18nKey: 'route.alarmcenter'
    },
    children: [
      {
        name: 'alarmcenter_alarmlog',
        path: '/alarmcenter/alarmlog',
        component: 'view.alarmcenter_alarmlog',
        meta: {
          title: 'alarmcenter_alarmlog',
          i18nKey: 'route.alarmcenter_alarmlog'
        }
      },
      {
        name: 'alarmcenter_alarmpush',
        path: '/alarmcenter/alarmpush',
        component: 'view.alarmcenter_alarmpush',
        meta: {
          title: 'alarmcenter_alarmpush',
          i18nKey: 'route.alarmcenter_alarmpush'
        }
      },
      {
        name: 'alarmcenter_alarmreminder',
        path: '/alarmcenter/alarmreminder',
        component: 'view.alarmcenter_alarmreminder',
        meta: {
          title: 'alarmcenter_alarmreminder',
          i18nKey: 'route.alarmcenter_alarmreminder'
        }
      }
    ]
  },
  // 异常页模块展示
  // {
  //   name: 'exception',
  //   path: '/exception',
  //   component: 'layout.base',
  //   meta: {
  //     title: 'exception',
  //     i18nKey: 'route.exception',
  //     icon: 'ant-design:exception-outlined',
  //     order: 7
  //   },
  //   children: [
  //     {
  //       name: 'exception_403',
  //       path: '/exception/403',
  //       component: 'view.403',
  //       meta: {
  //         title: 'exception_403',
  //         i18nKey: 'route.exception_403',
  //         icon: 'ic:baseline-block'
  //       }
  //     },
  //     {
  //       name: 'exception_404',
  //       path: '/exception/404',
  //       component: 'view.404',
  //       meta: {
  //         title: 'exception_404',
  //         i18nKey: 'route.exception_404',
  //         icon: 'ic:baseline-web-asset-off'
  //       }
  //     },
  //     {
  //       name: 'exception_500',
  //       path: '/exception/500',
  //       component: 'view.500',
  //       meta: {
  //         title: 'exception_500',
  //         i18nKey: 'route.exception_500',
  //         icon: 'ic:baseline-wifi-off'
  //       }
  //     }
  //   ]
  // },
  // 文档的模块展示
  // {
  //   name: 'document',
  //   path: '/document',
  //   component: 'layout.base',
  //   meta: {
  //     title: 'document',
  //     i18nKey: 'route.document',
  //     order: 2,
  //     icon: 'mdi:file-document-multiple-outline'
  //   },
  //   children: [
  //     {
  //       name: 'document_antd',
  //       path: '/document/antd',
  //       component: 'view.iframe-page',
  //       props: {
  //         url: 'https://antdv.com/components/overview-cn'
  //       },
  //       meta: {
  //         title: '张三',
  //         i18nKey: 'route.document_antd',
  //         order: 7,
  //         icon: 'logos:ant-design'
  //       }
  //     },
  //     {
  //       name: 'document_naive',
  //       path: '/document/naive',
  //       component: 'view.iframe-page',
  //       props: {
  //         url: 'https://www.naiveui.com/zh-CN/os-theme/docs/introduction'
  //       },
  //       meta: {
  //         title: 'document_naive',
  //         i18nKey: 'route.document_naive',
  //         order: 6,
  //         icon: 'logos:naiveui'
  //       }
  //     },
  //     {
  //       name: 'document_project',
  //       path: '/document/project',
  //       component: 'view.iframe-page',
  //       props: {
  //         url: 'https://docs.soybeanjs.cn/zh'
  //       },
  //       meta: {
  //         title: 'document_project',
  //         i18nKey: 'route.document_project',
  //         order: 1,
  //         localIcon: 'logo'
  //       }
  //     },
  //     {
  //       name: 'document_project-link',
  //       path: '/document/project-link',
  //       component: 'view.iframe-page',
  //       meta: {
  //         title: 'document_project-link',
  //         i18nKey: 'route.document_project-link',
  //         order: 2,
  //         localIcon: 'logo',
  //         href: 'https://docs.soybeanjs.cn/zh'
  //       }
  //     },
  //     {
  //       name: 'document_unocss',
  //       path: '/document/unocss',
  //       component: 'view.iframe-page',
  //       props: {
  //         url: 'https://unocss.dev/'
  //       },
  //       meta: {
  //         title: 'document_unocss',
  //         i18nKey: 'route.document_unocss',
  //         order: 5,
  //         icon: 'logos:unocss'
  //       }
  //     },
  //     {
  //       name: 'document_vite',
  //       path: '/document/vite',
  //       component: 'view.iframe-page',
  //       props: {
  //         url: 'https://cn.vitejs.dev/'
  //       },
  //       meta: {
  //         title: 'document_vite',
  //         i18nKey: 'route.document_vite',
  //         order: 4,
  //         icon: 'logos:vitejs'
  //       }
  //     },
  //     {
  //       name: 'document_vue',
  //       path: '/document/vue',
  //       component: 'view.iframe-page',
  //       props: {
  //         url: 'https://cn.vuejs.org/'
  //       },
  //       meta: {
  //         title: 'document_vue',
  //         i18nKey: 'route.document_vue',
  //         order: 3,
  //         icon: 'logos:vue'
  //       }
  //     }
  //   ]
  // }
];

/** create routes when the auth route mode is static */
export function createStaticRoutes() {
  const constantRoutes: ElegantRoute[] = [];

  const authRoutes: ElegantRoute[] = [];

  [...customRoutes, ...generatedRoutes].forEach(item => {
    if (item.meta?.constant) {
      constantRoutes.push(item);
    } else {
      authRoutes.push(item);
    }
  });

  return {
    constantRoutes,
    authRoutes
  };
}

/**
 * Get auth vue routes
 *
 * @param routes Elegant routes
 */
export function getAuthVueRoutes(routes: ElegantConstRoute[]) {
  return transformElegantRoutesToVueRoutes(routes, layouts, views);
}
