import React, { useState, useMemo, useEffect } from "react";
import { connect } from "dva";
import { withRouter } from "dva/router";
import { Dropdown, Icon, Menu, message, Button, Modal } from "antd";
import { HeaderSearch as OPTSearch, PictureThumb } from "@woowalker/feui";
import ModifyPassword from "../components/MainPage/ModifyPassword";
import FoUserInfoShow from "../components/MainPage/FoUserInfoShow";
import FeedbackQuestion from "../components/MainPage/FeedbackQuestion";
import GuideCanvas from "../components/MainPage/GuideCanvas";
import IconFont from "../utils/iconFont";
import {
  initFilter,
  requestFullScreenMethod,
  exitFullScreen,
  isFullscreenElement,
} from "../utils/common";
import config from "../config";
import "./header.less";
import Option from "./Option";
import FullScreenPage from "./FullScreen";
// 投屏
const DataV = (props) => {
  const navTo = () => {
    const { OrgId, Tenant, baseConfig } = props.login;
    const preUrl = baseConfig.SCREEN_URL || config.dataVUrl;
    const queryStr = `OrgId=${OrgId}&Tenant=${Tenant}`;
    const url = `${
      preUrl.indexOf("?") !== -1 ? preUrl : preUrl + "?"
    }${queryStr}`;
    window.open(url, "_blank");
  };
  return (
    
      {/*  */}
    
  );
};
const HeaderDataV = connect(({ login }) => ({ login }))(DataV);
// 搜索
const Search = (props) => {
  const [autoCompleteData, setAutoCompleteData] = useState([]);
  const leafMenus = useMemo(() => {
    const menuForms = [];
    const menuDatas = [];
    function traverseChild(item) {
      if (!item.Menu.Nav_MenuForm || item.ChildMenus?.length) {
        item.ChildMenus.forEach((x) => {
          traverseChild(x);
        });
      } else if (item.Menu.Nav_MenuForm) {
        menuForms.push({
          MenuName: item.Menu.NAME,
          ...item.Menu.Nav_MenuForm,
        });
        menuDatas.push(item);
      }
    }
    const menus = props.login.loginInfo.Menus || [];
    menus.forEach((item) => {
      traverseChild(item);
    });
    return { menuForms, menuDatas };
  }, [props.login.loginInfo?.Menus]);
  /**
   * 搜索菜单
   * @param {*} e
   */
  const handleSearchMenu = (e) => {
    if (!e || e === "") {
      setAutoCompleteData([]);
      return;
    }
    const validResult = [];
    leafMenus.menuForms.forEach((item) => {
      if (
        item.CODE.toLowerCase().indexOf(e.toLowerCase()) >= 0 ||
        item.NAME.toLowerCase().indexOf(e.toLowerCase()) >= 0 ||
        item.MenuName.toLowerCase().indexOf(e.toLowerCase()) >= 0
      ) {
        validResult.push(item);
      }
    });
    setAutoCompleteData(validResult);
  };
  /**
   * 选中菜单
   * @param {*} e
   */
  const handleSelectMenu = (e) => {
    const menu = leafMenus.menuDatas.find(
      (item) => item.Menu.Nav_MenuForm.ID === e
    );
    props.dispatch({
      type: "app/updateActivatedMenu",
      payload: {
        currActivatedTab: menu.Node.ID,
        currActivatedMenu: menu.Node,
      },
    });
    props.history.push({ pathname: `/main/${menu.Node.ID}` });
  };
  if (window.navigator.userAgent.indexOf("Windows") < 1) {
    return ;
  } else {
    return (
      
    );
  }
  //return (
  //
  // 
  //)
};
const HeaderSearch = withRouter(connect(({ login }) => ({ login }))(Search));
// 个人中心
const User = (props) => {
  const [visible, setVisible] = useState(false);
  /**
   * 注销登录
   */
  const handleLogout = () => {
    const { OrgId, userId } = props.login;
    const logJson = initFilter(OrgId, userId, "", 0, 1, 0);
    props.dispatch({
      type: "app/addLoginOut",
      payload: logJson,
    });
    localStorage.removeItem("accessToken");
    localStorage.removeItem("currentMineTypeName");
    props.history.push({ pathname: "/login" });
  };
  /**
   * 锁屏
   */
  const handleLockScreen = () => {
    localStorage.removeItem("accessToken");
    props.dispatch({
      type: "login/save",
      payload: {
        screenLocked: true,
      },
    });
  };
  /**
   * 菜单选中
   * @param {*} evt
   */
  const handleUserMenuClick = (evt) => {
    switch (evt.key) {
      case "user-menu-logout":
        handleLogout();
        break;
      case "user-menu-lockscreen":
        handleLockScreen();
        break;
      case "user-menu-cacheclean":
        window.localStorage.clear();
        message.success("清除成功,即将重新加载页面", 2, () => {
          setTimeout(() => window.location.reload(true), 500);
        });
        break;
      default:
        break;
    }
    setVisible(false);
  };
  const { loginInfo = {} } = props.login;
  return (
    
          
            当前登录:{loginInfo.User?.NAME}
          
          
            我的资料
          
          
            修改密码
          
          {/* 问题反馈 */}
          {/* 屏幕锁定 */}
          清除缓存
          版本号:{config.version}
          退出登录
        
      }
    >
      
        
      
    
  );
};
const HeaderUser = withRouter(connect(({ login }) => ({ login }))(User));
// 2023-10-08 生产单元
const MineType = (props) => {
  const [visible, setVisible] = useState(false);
  let currUserMineType = localStorage.getItem("MineType");
  if (currUserMineType == null || currUserMineType == undefined) {
    localStorage.setItem("MineType", "30");
    localStorage.setItem("currentMineTypeName", "露天矿");
  } else {
    if (localStorage.getItem("currentMineTypeName") == null) {
      if (currUserMineType.indexOf(30) > -1) {
        localStorage.setItem("currentMineType", 30);
        localStorage.setItem("currentMineTypeName", "露天矿");
      } else if (currUserMineType.indexOf(20) > -1) {
        localStorage.setItem("currentMineType", 20);
        localStorage.setItem("currentMineTypeName", "尾矿库");
      } else if (currUserMineType.indexOf(10) > -1) {
        localStorage.setItem("currentMineType", 10);
        localStorage.setItem("currentMineTypeName", "选矿厂");
      } else if (currUserMineType.indexOf(40) > -1) {
        localStorage.setItem("currentMineType", 40);
        localStorage.setItem("currentMineTypeName", "地下矿");
      }
      else if (currUserMineType.indexOf(31) > -1) {
        localStorage.setItem("currentMineType", 31);
        localStorage.setItem("currentMineTypeName", "职能口");
      }
      else if (currUserMineType.indexOf(32) > -1) {
        localStorage.setItem("currentMineType", 32);
        localStorage.setItem("currentMineTypeName", "非金属");
      }
    } else {
      let currentMineType = localStorage.getItem("currentMineType");
      if (currUserMineType.indexOf(currentMineType) > -1) {
        if (currentMineType == 30) {
          localStorage.setItem("currentMineTypeName", "露天矿");
        } else if (currUserMineType == 20) {
          localStorage.setItem("currentMineTypeName", "尾矿库");
        } else if (currUserMineType == 10) {
          localStorage.setItem("currentMineTypeName", "选矿厂");
        } else if (currUserMineType == 40) {
          localStorage.setItem("currentMineTypeName", "地下矿");
        }else if (currUserMineType == 31) {
          localStorage.setItem("currentMineTypeName", "职能口");
        }else if (currUserMineType == 32) {
          localStorage.setItem("currentMineTypeName", "非金属");
        }
      } else {
        if (currUserMineType.indexOf(30) > -1) {
          localStorage.setItem("currentMineTypeName", "露天矿");
        } else if (currUserMineType.indexOf(20) > -1) {
          localStorage.setItem("currentMineTypeName", "尾矿库");
        } else if (currUserMineType.indexOf(10) > -1) {
          localStorage.setItem("currentMineTypeName", "选矿厂");
        } else if (currUserMineType.indexOf(40) > -1) {
          localStorage.setItem("currentMineTypeName", "地下矿");
        }
        else if (currUserMineType.indexOf(31) > -1) {
          localStorage.setItem("currentMineTypeName", "职能口");
        }
        else if (currUserMineType.indexOf(32) > -1) {
          localStorage.setItem("currentMineTypeName", "非金属");
        }
      }
    }
  }
  let currUserMineTypeArray = [];
  if (currUserMineType.indexOf("30") > -1) {
    currUserMineTypeArray.push({ key: "30", label: "露天矿" });
  }
  if (currUserMineType.indexOf("10") > -1) {
    currUserMineTypeArray.push({ key: "10", label: "选矿厂" });
  }
  if (currUserMineType.indexOf("20") > -1) {
    currUserMineTypeArray.push({ key: "20", label: "尾矿库" });
  }
  if (currUserMineType.indexOf("40") > -1) {
    currUserMineTypeArray.push({ key: "40", label: "地下矿" });
  }
  if (currUserMineType.indexOf("31") > -1) {
    currUserMineTypeArray.push({ key: "31", label: "职能口" });
  }
  if (currUserMineType.indexOf("32") > -1) {
    currUserMineTypeArray.push({ key: "32", label: "非金属" });
  }
  const MineTypeMenu = () => {
    return (
      
    );
  };
  /**
   * 生产单元切换
   * @param {*} evt
   */
  const handleMineTypeClick = (evt) => {
    localStorage.setItem("currentMineType", evt.key);
    localStorage.setItem("currentMineTypeName", evt.item.props.children);
    setVisible(false);
    window.location.reload();
  };
  if (window.navigator.userAgent.indexOf("Windows") < 1) {
    return ;
  } else {
    return (
      
        
          生产单元:{localStorage.getItem("currentMineTypeName")}
        
      
    );
  }
};
const HeaderMineType = withRouter(
  connect(({ login }) => ({ login }))(MineType)
);
const GuideCodePage = (props) => {
  const [showCanvas, setshowCanvas] = useState(false);
  const currVans = (val) => {
    setshowCanvas(true);
  };
  /**
   * 生产单元切换
   * @param {*} evt
   */
  if (window.navigator.userAgent.indexOf("Windows") < 1) {
    return ;
  } else {
    return (
      
         {
            currVans();
          }}
          style={{ margin: "0px 36px", display: "flex", alignItems: "center" }}
        >
          
        
         {
            setshowCanvas(false);
          }}
          onCancel={() => {
            setshowCanvas(false);
          }}
          footer={null}
        >
          
        
       
    );
  }
};
const GuideCode = withRouter(
  connect(({ login }) => ({ login }))(GuideCodePage)
);
const NavOpton = (props) => {
  const [showModal, setshowModal] = useState(false);
  const getChildCount = (val) => {
    setshowModal(val);
  };
  if (window.navigator.userAgent.indexOf("Windows") < 1) {
    return ;
  } else {
    return (
      
         {
            setshowModal(true);
          }}
        >
          {/*  */}
          
        
         {
            setshowModal(false);
          }}
          onCancel={() => {
            setshowModal(false);
          }}
          className="headerModal"
        >
          
        
       
    );
  }
};
const FullScreenOpton = (props) => {
  const [showModal, setshowModal] = useState(false);
  const getChildCount = (val) => {
    setshowModal(val);
  };
  const [fullScreen, setFullScreen] = useState(false);
  const [originResizeFunc, setOriginResizeFunc] = useState();
  const escFunction = () => {
    let isFull = !!(
      document.fullscreen ||
      document.mozFullScreen ||
      document.webkitIsFullScreen ||
      document.webkitFullScreen ||
      document.msFullScreen
    );
    if (isFull) {
    // /
    }else{
      // requestFullScreenMethod(document.body);
      setshowModal(false);
    }
  };
  useEffect(() => {
    // 监听退出全屏事件 --- chrome 用 esc 退出全屏并不会触发 keyup 事件
    document.addEventListener(
      "webkitfullscreenchange",
      escFunction
    ); /* Chrome, Safari and Opera */
    document.addEventListener("mozfullscreenchange", escFunction); /* Firefox */
    document.addEventListener(
      "fullscreenchange",
      escFunction
    ); /* Standard syntax */
    document.addEventListener(
      "msfullscreenchange",
      escFunction
    ); /* IE / Edge */
    return () => {
      //销毁时清除监听
      document.removeEventListener("webkitfullscreenchange", escFunction);
      document.removeEventListener("mozfullscreenchange", escFunction);
      document.removeEventListener("fullscreenchange", escFunction);
      document.removeEventListener("MSFullscreenChange", escFunction);
    };
  }, []);
  if (window.navigator.userAgent.indexOf("Windows") < 1) {
    return ;
  } else {
    return (
      
         {
            setshowModal(true);
            requestFullScreenMethod(document.body);     // 进入全屏
          }}
        >
          
          {/*  */}
        
         {
            setshowModal(false);
          }}
          onCancel={() => {
            setshowModal(false);
          }}
          className="fullScreen"
        >
          
        
       
    );
  }
};
const FullScreen = withRouter(
  connect(({ login }) => ({ login }))(FullScreenOpton)
);
const HeaderNav = withRouter(connect(({ login }) => ({ login }))(NavOpton));
function Header(props) {
  const { baseConfig = {} } = props.login;
  const thumbCode = baseConfig.Nav_PictureLogo
    ? baseConfig.Nav_PictureLogo.CODE
    : "";
  let isMobile = false;
  if (window.navigator.userAgent.indexOf("Windows") < 1) {
    isMobile = true;
  }
  return (
    
      
        
        {isMobile ? (
          
 
        ) : (
          
            矿山安全生产标准化系统
            (SPS)
            {baseConfig.SYS_NAME}{" "}
          
        )}
      
 
      {!props.matchLogin ? (
        
          {/*  */}
          {/*  */}
          {window.location.host == "121.41.2.71:8001" ?  : ""} 
          
          
          
          
          {/* style={{"color":"#f3eded"}} */}
          
          
          
            {props.login.user.NAME}({props.login.user.CODE})
          
        
      ) : null}
    
 
  );
}
export default connect(({ login }) => ({ login }))(Header);