import React from 'react';
import AntdMenu from 'antd/es/menu';
import classnames from 'classnames';

import { ConfigConsumer } from '../config-provider';
import './index.less';

const Menu = props => (
  <ConfigConsumer>
    {({ getPrefixCls }) => {
      const { prefixCls: customizePrefixCls, ...restProps } = props;
      const prefixCls = getPrefixCls('menu', customizePrefixCls);
      return <AntdMenu {...restProps} prefixCls={prefixCls} />;
    }}
  </ConfigConsumer>
);

Menu.Item = props => (
  <ConfigConsumer>
    {({ getPrefixCls }) => {
      const {
        prefixCls: customizePrefixCls,
        icon = null,
        children,
        className,
        ...restProps
      } = props;
      const prefixCls = getPrefixCls('menu', customizePrefixCls);
      const cls = classnames(className, {
        [`${prefixCls}-item-with-icon`]: !!icon,
      });
      let withIconChildren = null;
      if (icon) {
        withIconChildren = (
          <div>
            {icon}
            <span>{children}</span>
          </div>
        );
      }
      return (
        <AntdMenu.Item {...restProps} className={cls} prefixCls={prefixCls}>
          {icon ? withIconChildren : children}
        </AntdMenu.Item>
      );
    }}
  </ConfigConsumer>
);

Menu.SubMenu = props => (
  <ConfigConsumer>
    {({ getPrefixCls }) => {
      const { prefixCls: customizePrefixCls, ...restProps } = props;
      const prefixCls = getPrefixCls('menu', customizePrefixCls);
      return <AntdMenu.SubMenu {...restProps} prefixCls={prefixCls} />;
    }}
  </ConfigConsumer>
);

Menu.ItemGroup = props => (
  <ConfigConsumer>
    {({ getPrefixCls }) => {
      const { prefixCls: customizePrefixCls, ...restProps } = props;
      const prefixCls = getPrefixCls('menu', customizePrefixCls);
      return <AntdMenu.ItemGroup {...restProps} prefixCls={prefixCls} />;
    }}
  </ConfigConsumer>
);

Menu.Divider = props => (
  <ConfigConsumer>
    {({ getPrefixCls }) => {
      const { prefixCls: customizePrefixCls, ...restProps } = props;
      const prefixCls = getPrefixCls('menu', customizePrefixCls);
      return <AntdMenu.Divider {...restProps} prefixCls={prefixCls} />;
    }}
  </ConfigConsumer>
);

export default Menu;
