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

const { renderMenuTitle } = useRenderMenuTitle()

export const useRenderMenuItem = () =>
  // allRouters: AppRouteRecordRaw[] = [],
  {
    const route = useRoute()
    const currentSource = getCurrentSource(route.query.source)
    const renderMenuItem = (routers: AppRouteRecordRaw[], parentPath = '/') => {
      return routers
        .filter((v) => {
          // console.log('v', v.path)
          if (currentSource === 'zhly') {
            return (
              (!v.meta?.hidden &&
                [
                  '智慧连油',
                  '连油监控',
                  '监控查询',
                  '视频告警',
                  '告警配置',
                  '连油看板',
                  '设备地图'
                ].includes(v.meta?.title)) ||
              (!v.meta?.hidden && ['split_view1', '/iotmap'].includes(v.path))
            )
          } else if (currentSource === 'zhzq') {
            return (
              (!v.meta?.hidden && ['设备地图'].includes(v.meta?.title)) ||
              (!v.meta?.hidden && ['/device_monitor', '/iotmap'].includes(v.path))
            )
          } else if (currentSource === 'spzx') {
            return (
              !v.meta?.hidden &&
              [
                '视频中心',
                '协议管理',
                '产品分类',
                '产品管理',
                '视频设备',
                '视频配置',
                '通道管理',
                '监控中心'
              ].includes(v.meta?.title)
            )
          } else if (currentSource === 'qhse') {
            return (
              !v.meta?.hidden &&
              [
                'QHSE驾驶舱',
                'QHSE看板',
                '质量管控',
                '计量器具管理',
                '计量器具台账',
                '检测证书管控',
                '安全风控',
                '行为安全管理',
                '分析数据源',
                '安全行为观察',
                '工艺安全管理',
                '危险源辨识',
                '工作安全分析',
                '高危作业许可',
                '系统安全管理',
                '特种作业人员',
                '人员台账',
                '人员证书',
                '隐患排查',
                '隐患排查分类',
                '隐患排查记录',
                '应急体系',
                '突发事件应急处理',
                '环境合规',
                'QHSE月报管理',
                '环境因素识别',
                '职业健康',
                '劳保用品',
                '职业健康体检',
                '健康培训'
              ].includes(v.meta?.title)
            )
          } else if (currentSource === 'yyhy') {
            return (
              !v.meta?.hidden && ['生产运营双周会', '数据填报', '数据汇总'].includes(v.meta?.title)
            )
          } else if (currentSource === 'qhse_nav') {
            return (
              !v.meta?.hidden &&
              [
                'QHSE驾驶舱',
                'QHSE看板',
                '质量管控',
                '计量器具管理',
                '计量器具台账',
                '检测证书管控',
                '计量器具报废',
                '设备检测管控',
                '应检设备台账',
                '检测证书管理',
                '质量统筹管控',
                '施工质量管控',
                '产品服务质量',
                '客户满意度',
                '安全风控',
                '行为安全管理',
                '分析数据源',
                '安全行为观察',
                '工艺安全管理',
                '变更管理',
                '危险源辨识',
                '工作安全分析',
                '高危作业许可',
                '系统安全管理',
                '体系建设认证',
                '内审',
                '管理评审',
                '外审',
                '特种作业人员',
                '人员台账',
                '人员证书',
                '安全培训',
                '安全培训计划',
                '安全培训档案',

                '隐患排查治理',
                '隐患排查分类',
                '隐患排查记录',
                '应急体系管理',
                '排查治理分类',
                '排查治理记录',
                '物资台账',
                '应急物资',
                '物资管控检测',
                '海外应急处置',
                '应急演练',
                '突发事件应急处理',
                '安全绩效',
                '安全考核',
                '环境合规',
                '危废处置',
                '环境事件处置',
                '环境因素识别',
                '职业健康',
                '劳保用品',
                '职业健康体检',
                '健康培训',
                '突发事件处置',
                'QHSE月报管理',
                '月报填报',
                '月报汇总',
                'QHSE资料库',
                'QHSE资质证书',
                '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
    }
  }
