import _ from 'lodash';
import { useActiveMenuItem } from 'src/hooks/useActiveMenuItem';
import getMenuItems from 'src/utils/appsMenu/appsMenu';
import styles from './CircularMenu.module.scss';
import CircularMenuItem from './CircularMenuItem';

declare module 'react' {
  interface CSSProperties {
    '--diameter'?: string;
    '--delta'?: string;
    '--i'?: string;
  }
}

function CircularMenu({ circleSize }) {
  const chunkSize = 7;
  const linkChunks = _.chunk(getMenuItems(), chunkSize);

  const { isActiveItem, activeItem } = useActiveMenuItem(getMenuItems());

  const calculateDiameter = (index, circleSize) => {
    const menuCircleDiameter = circleSize / 2 + 45 * (index + 1) - 10;
    const nextLevelMenuAngle = index === 1 ? -28 : 0; // decreases the angle of second menu layer
    const menuItemsAngle = index === 1 ? 16 : 23; // angle in which menu items spread around the brain
    return { menuCircleDiameter, nextLevelMenuAngle, menuItemsAngle };
  };

  return (
    <div>
      {linkChunks.map((chunk, index) => {
        const { menuCircleDiameter, nextLevelMenuAngle, menuItemsAngle } = calculateDiameter(
          index,
          circleSize
        );
        return (
          <div
            key={index}
            className={styles.circle}
            style={{ width: circleSize, height: circleSize }}
          >
            <div
              className={styles.menu}
              style={{
                '--diameter': `${menuCircleDiameter}px`,
                '--delta': `${nextLevelMenuAngle}deg`,
                '--i': `${menuItemsAngle}deg`,
              }}
            >
              {chunk.map((item, index) => {
                const isSelected = activeItem?.name === item.name;
                return (
                  <li key={index}>
                    <CircularMenuItem
                      item={item}
                      onClick={() => isActiveItem(item)}
                      selected={isSelected}
                    />
                  </li>
                );
              })}
            </div>
          </div>
        );
      })}
    </div>
  );
}

export default CircularMenu;

Neighbours