
import { Outlet, history, useLocation } from 'umi';
import styles from './index.less';
import { useEffect, useState } from 'react';
import { MenuType, tabsType } from '@/utils/menu';
import { Select, message } from 'antd';
import LeftMenuOne from '@/layouts/LeftMenuOne';
import LeftMenuTwo from '@/layouts/LeftMenuTwo';
import BottomConfigInfo from '@/layouts/BottomConfigInfo';

const options2 = [
  { value: 1, label: 'GLQ管理' },
  { value: 2, label: 'MY管理' },
  { value: 3, label: 'SB管理' },
  { value: 4, label: 'SF管理' },
  { value: 5, label: 'SBJK二维版', disabled: true },
  { value: 6, label: '设备注册', disabled: true }
]

const leftMenuType: any = {
  // GLQ管理
  'GLQ远程维护': <LeftMenuOne key={1} data={MenuType['GLQ远程维护']} />,
  '网络MMJ管理': <LeftMenuTwo key={2} data={MenuType['网络MMJ管理']} />,
  '网络GLQ配置': <LeftMenuOne key={3} data={MenuType['网络GLQ配置']} />,
  // MY管理
  '密钥体管理': <LeftMenuOne key={4} data={MenuType['密钥体管理']} />,
  '密钥管理': <LeftMenuOne key={5} data={MenuType['密钥管理']} />,
  '邮箱管理': <LeftMenuOne key={6} data={MenuType['邮箱管理']} />,
  // SB管理
  '设备管理': <LeftMenuOne key={7} data={MenuType['设备管理']} />,
  '日志管理': <LeftMenuTwo key={8} data={MenuType['日志管理']} />,
  '审计管理': <LeftMenuTwo key={9} data={MenuType['审计管理']} />,
  '境外任务管理': <LeftMenuTwo key={10} data={MenuType['境外任务管理']} />,
  // SF管理
  '算法资源管理': <LeftMenuOne key={11} data={MenuType['算法资源管理']} />,
  '算法配置管理': <LeftMenuOne key={12} data={MenuType['算法配置管理']} />,
  '算法托收管理': <LeftMenuOne key={13} data={MenuType['算法托收管理']} />,
  '算法邮箱管理': <LeftMenuOne key={14} data={MenuType['算法邮箱管理']} />,
  // SBJK二维版
  '设备监控二维版': <div />,
  // 设备注册
  '注册管理': <LeftMenuOne key={15} data={MenuType['注册管理']} />,
  '位置管理': <LeftMenuOne key={16} data={MenuType['位置管理']} />
}

export default function Layout() {
  const [selectVal, setSelectVal] = useState<number>(1);
  const [tabList, setTabList] = useState<any>([]);
  const [active, setActive] = useState<number>(1);
  const [activeName, setActiveName] = useState<any>('GLQ远程维护');

  // 获取布局信息
  let layoutInfo: any = localStorage.getItem('layoutInfo');
  layoutInfo = JSON.parse(layoutInfo);

  useEffect(() => {
    // 校验浏览器是否有储存的布局信息
    if (layoutInfo) {
      setActive(layoutInfo.active);
      setActiveName(layoutInfo.activeName);
      setSelectVal(layoutInfo.selectVal);
      setTabList([...tabsType[layoutInfo.selectVal]]);
    } else {
      setTabList([...tabsType[selectVal]]);
    }
  }, [])

  // 页面销毁前记录下当前布局信息
  window.addEventListener('beforeunload', function (event) {
    let layoutInfo: any = {
      selectVal: selectVal,
      active: active,
      activeName: activeName,
    }
    localStorage.setItem('layoutInfo', JSON.stringify(layoutInfo));
  });

  useEffect(() => {
    // 条件判断： 当选择框的值发生改变时，在（tabList长度大于0 并且 没有发现记录布局的数据）时 ，默认进入第一个模块的页面
    if (tabList.length > 0 && !layoutInfo) {
      setActiveName(tabList[0].name)
      let info = MenuType[tabList[0].name];
      if (info[0].data) {
        history.push(`${info[0].data[0].url}`)
      } else {
        history.push(`${info[0].url}`)
      }
    }
  }, [selectVal])

  return (
    <div id={styles.layout_main}>
      {/* 顶部导航 */}
      <div className={styles.nav_warp}>
        <div className={styles.nav_warp_t}>

          <div className={styles.logo_warp}>
            <div className={styles.logo_icon}></div>
            <div className={styles.system_title}>XXXX管理系统</div>
          </div>

          <Select
            value={selectVal}
            style={{ width: 180 }}
            onChange={(e) => {
              // 改变下拉框数据时将布局信息清空
              localStorage.setItem('layoutInfo', JSON.stringify(null));
              setSelectVal(e)
              setTabList([...tabsType[e]])
              setActive(1)
            }}
            options={options2}
          />

          <div className={styles.menu_list}>
            <div title=''></div>
            <div title=''></div>
            <div title=''></div>
            <div title=''></div>
            <div title=''></div>
            <div title=''></div>
          </div>

          <div className={styles.times}>
            <div>XXXX：3023-00-00 15:00:00</div>
            <div>XXXX：3023-00-00 15:00:00</div>
          </div>
        </div>

        <div className={styles.nav_warp_b}>
          {
            tabList.map((item: any, index: number) => {
              return <div key={index} className={styles.tab_warp}>
                <div className={`${styles.tab_con} ${(index + 1) == active ? styles.active_tab : ''}`}
                  onClick={() => {
                    let info = MenuType[item.name];

                    setActive(item.id)
                    setActiveName(item.name)

                    if (info.length == 0 || info[0].data && info[0].data.length == 0) {
                      history.push('/construction');
                      // 暂时屏蔽
                      // setActive(tabList[0].id)
                      // setActiveName(tabList[0].name)
                      // message.info(item.name + '模块正在建设中！')
                      return
                    }

                    // 改变activeName时跳转菜单栏的第一个路由
                    if (info[0].data) {
                      history.push(`${info[0].data[0].url}`)
                    } else {
                      history.push(`${info[0].url}`)
                    }

                  }}>
                  {item.name}
                </div>
              </div>
            })
          }
        </div>
      </div>

      {/* 主体内容 */}
      <div className={styles.main_warp}>
        {/* 右侧菜单栏 */}
        <div className={styles.left_menu}>
          {leftMenuType[activeName]}
        </div>

        {/* 左侧内容 */}
        <div className={styles.right_warp}>
          <div className={styles.right_route} 
            style={{
              height: selectVal == 1 ? 
              'calc(100vh - 114px - 141px - 52px)' : 
              'calc(100vh - 114px - 52px)'
            }}
          >
            <Outlet></Outlet>
          </div>

          {/* GQL管理整个模块页面底部的配置信息 */}
          {selectVal == 1 && <BottomConfigInfo />}
          
          {/* 底部信息 */}
          <div className={styles.footer}>
            <div>软件当前版本：0.0.0</div>
            <div>当前用户：admin</div>
            <div>当前操作：设备注册</div>
          </div>
        </div>
      </div>
    </div>
  );
}
