import { ElSubMenu, ElMenuItem } from 'element-plus'
import { hasOneShowingChild } from '../helper'
import { isUrl } from '@/utils/is'
import { useRenderMenuTitle } from './useRenderMenuTitle'
import { pathResolve } from '@/utils/routerHelper'

const { renderMenuTitle } = useRenderMenuTitle()

export const useRenderMenuItem = () =>
  // allRouters: AppRouteRecordRaw[] = [],
  {
    const route = useRoute()
    const currentSource = sessionStorage.getItem('LOGIN_SOURCE') || route.query.source
    const renderMenuItem = (routers: AppRouteRecordRaw[], parentPath = '/') => {
      return routers
        .filter((v) => {
          if (currentSource === 'zhly') {
            return (
              !v.meta?.hidden &&
              ['智慧连油', '连油监控', '监控查询', '视频告警', '分屏管理', '告警配置'].includes(
                v.meta?.title
              )
            )
          } else if (currentSource === 'znzq') {
            return !v.meta?.hidden && ['/device_monitor'].includes(v.path)
          } else if (currentSource === 'spzx') {
            return (
              !v.meta?.hidden &&
              [
                '视频中心',
                '协议管理',
                '产品分类',
                '产品管理',
                '视频设备',
                '视频配置',
                '通道管理',
                '监控中心'
              ].includes(v.meta?.title)
            )
          } else if (currentSource === 'qhse') {
            return (
              !v.meta?.hidden &&
              [
                'QHSE',
                '计量器具',
                '仪器检测',
                '台账管理',
                '证书管理',
                '危险源管理',
                '环境因素识别',
                '事故事件上报'
              ].includes(v.meta?.title)
            )
          } else {
            return !v.meta?.hidden
          }
          // return !v.meta?.hidden
        })
        .map((v) => {
          const meta = v.meta ?? {}
          const { oneShowingChild, onlyOneChild } = hasOneShowingChild(v.children, v)
          const fullPath = isUrl(v.path) ? v.path : pathResolve(parentPath, v.path) // getAllParentPath<AppRouteRecordRaw>(allRouters, v.path).join('/')

          if (
            oneShowingChild &&
            (!onlyOneChild?.children || onlyOneChild?.noShowingChildren) &&
            !meta?.alwaysShow
          ) {
            return (
              <ElMenuItem
                index={onlyOneChild ? pathResolve(fullPath, onlyOneChild.path) : fullPath}
              >
                {{
                  default: () => renderMenuTitle(onlyOneChild ? onlyOneChild?.meta : meta)
                }}
              </ElMenuItem>
            )
          } else {
            return (
              <ElSubMenu index={fullPath}>
                {{
                  title: () => renderMenuTitle(meta),
                  default: () => renderMenuItem(v.children!, fullPath)
                }}
              </ElSubMenu>
            )
          }
        })
    }

    return {
      renderMenuItem
    }
  }
