import { Menu, Portal } from '@mantine/core';
import React, { useState } from 'react';
import { type MantineBetterMenuInstanceItem, useMantineBetterMenus } from './Store';
export function MenuRenderer() {
  const { menus, providerID, setInstanceState, width } = useMantineBetterMenus((s) => ({
    menus: s.menus,
    providerID: s.providerID,
    setInstanceState: s.setInstanceState,
    setState: s.setState,
    width: s.width,
  }));
  return (
    
      {React.Children.toArray(
        menus?.map((m, menuIndex) => {
          return (
            
          );
        })
      )}
    
  );
}
const MenuItemRenderer = ({ children, label, ...props }: MantineBetterMenuInstanceItem) => {
  const [loading, setLoading] = useState(false);
  if (typeof props.renderer === 'function') {
    return props.renderer({ ...props, loading, renderer: undefined, setLoading });
  }
  if (typeof props.renderer === 'object') {
    return props.renderer;
  }
  if (props.isDivider) {
    return ;
  }
  if (props.items && props.items.length > 0) {
    return (
      
        
           {
              props.onClick?.(e);
              if (props.onClickAsync) {
                setLoading(true);
                props.onClickAsync().finally(() => setLoading(false));
              }
            }}
            styles={{
              itemLabel: {
                overflow: 'auto',
                wordWrap: 'break-word',
              },
              ...props.styles,
            }}
          >
            {children ?? label}
          
        
        
          {React.Children.toArray(
            props.items.map((subitem, subitemIndex) => (
              
            ))
          )}
        
      
    );
  }
  if (!props.onClick && !props.onClickAsync) {
    return )}> {children ?? label};
  }
  return (
     {
        props.onClick?.(e);
        if (props.onClickAsync) {
          setLoading(true);
          props.onClickAsync(e).finally(() => setLoading(false));
        }
      }}
      styles={{
        itemLabel: {
          overflow: 'auto',
          wordWrap: 'break-word',
        },
        ...props.styles,
      }}
    >
      {children ?? label}
    
  );
};