import React, { useState, useEffect } from 'react';
import PropTypes from 'prop-types';
import { Link } from 'react-router-dom';
import { Layout, Menu, Drawer } from 'antd';
import {
  DashboardOutlined,
  ProfileOutlined,
  AreaChartOutlined,
  MobileOutlined,
  ApiOutlined,
  NotificationOutlined,
  CheckCircleOutlined,
  SettingOutlined,
  TeamOutlined,
  LogoutOutlined,
} from '@ant-design/icons';
import styles from './Sider.module.scss';
const { Sider } = Layout;
const { SubMenu, Item } = Menu;
const ACCOUNTS = 'accounts';
const NETWORK = 'network';
const CONFIGURATION = 'configuration';
const INSIGHTS = 'insights';
const SYSTEM = 'system';
const HISTORY = 'history';
const rootSubmenuKeys = [ACCOUNTS, NETWORK, CONFIGURATION, INSIGHTS, SYSTEM, HISTORY];
const SideMenu = ({
  locationState,
  collapsed,
  isMobile,
  logo,
  logoMobile,
  onMenuButtonClick,
  onMenuItemClick,
  onLogout,
}) => {
  const [openKeys, setOpenKeys] = useState([]);
  useEffect(() => {
    setOpenKeys([]);
  }, [collapsed]);
  const enocMenuItems = [
    {
      key: 'dashboard',
      icon: ,
      path: '/',
      text: 'Dashboard',
      onClick: onMenuItemClick,
    },
    {
      key: 'profiles',
      icon: ,
      path: '/profiles',
      text: 'Profiles',
      onClick: onMenuItemClick,
    },
    {
      key: 'reports',
      icon: ,
      path: '/analytics/qoe',
      text: 'Insights',
      onClick: onMenuItemClick,
    },
    {
      key: 'client-devices',
      icon: ,
      path: '/network/client-devices',
      text: 'Client Devices',
      onClick: onMenuItemClick,
    },
    {
      key: 'network-elements',
      icon: ,
      path: '/network/elements',
      text: 'Network Elements',
      onClick: onMenuItemClick,
    },
    {
      key: 'alarms',
      icon: ,
      path: '/network/alarms',
      text: 'Alarms',
      onClick: onMenuItemClick,
    },
    {
      key: 'recommendations',
      icon: ,
      path: '/recommendations',
      text: 'Recommendations',
      onClick: onMenuItemClick,
    },
    {
      key: 'settings',
      icon: ,
      path: '/settings',
      text: 'Settings',
      onClick: onMenuItemClick,
    },
    {
      key: ACCOUNTS,
      icon: ,
      text: 'Customers',
      path: '/accounts/customers',
      onClick: onMenuItemClick,
    },
  ];
  const commonMenuItems = [
    {
      key: 'logout',
      icon: ,
      path: '/signout',
      text: 'Sign Out',
      onClick: onLogout,
    },
  ];
  const onOpenChange = keys => {
    const latestOpenKey = keys.find(key => !openKeys.includes(key));
    if (rootSubmenuKeys.indexOf(latestOpenKey) === -1) {
      setOpenKeys(keys);
    } else {
      setOpenKeys(latestOpenKey ? [latestOpenKey] : []);
    }
  };
  const getMenu = (config = { items: [] }, defaultSelectedKeys = []) => {
    const items = [];
    let keys = [];
    let selectedKeys = [...defaultSelectedKeys];
    config.items.forEach(item => {
      if (item && item.key) {
        if (item.children) {
          const subMenu = getMenu({ items: item.children, parent: item });
          if (subMenu.selectedKeys && subMenu.selectedKeys.length) {
            selectedKeys = [...selectedKeys, ...subMenu.selectedKeys];
          }
          if (subMenu.openKeys && subMenu.openKeys.length) {
            keys = [...keys, ...subMenu.openKeys];
          }
          items.push(
            
                  {item.icon}
                  {item.text}
                
              }
            >
              {subMenu.items}
            
          );
        } else {
          const ItemComponent = item.Component || Item;
          let LinkComponent = ({ ...restP }) => (
            
          );
          if (item.LinkComponent) {
            LinkComponent = item.LinkComponent;
          }
          const path = locationState.pathname;
          const pathAndHash = `${path}${locationState.hash}`; // for hash routing
          if (path.startsWith(item.path) || pathAndHash.startsWith(item.path)) {
            if (config.parent) {
              keys.push(config.parent.key);
            }
            selectedKeys.push(item.key.toString());
          }
          items.push(
            
              
                {item.icon}
                {item.text}
              
            
          );
        }
      }
    });
    return {
      items,
      selectedKeys,
      keys,
    };
  };
  const menuConfig = {
    items: [...enocMenuItems, ...commonMenuItems],
  };
  const menu = getMenu(menuConfig);
  const sider = (
    
      
      
    
  );
  if (isMobile) {
    return (
      
        {sider}
      
    );
  }
  return sider;
};
SideMenu.propTypes = {
  locationState: PropTypes.instanceOf(Object).isRequired,
  collapsed: PropTypes.bool.isRequired,
  isMobile: PropTypes.bool.isRequired,
  logo: PropTypes.string.isRequired,
  logoMobile: PropTypes.string.isRequired,
  onMenuButtonClick: PropTypes.func.isRequired,
  onMenuItemClick: PropTypes.func.isRequired,
  onLogout: PropTypes.func.isRequired,
};
export default SideMenu;