import { useHotkeys } from '@mantine/hooks';
import type { HotkeyItemOptions } from '@mantine/hooks';
import { useEffect } from 'react';
import { useLocalLibState } from '..';

// Helper function to cancel event propagation
export function cancelEvent(event: any) {
  event?.preventDefault();
  event?.stopPropagation();
  event?.nativeEvent?.stopImmediatePropagation();
}

export type InvenTreeHotkeyItem = [
  string,
  string,
  (event: KeyboardEvent) => void,
  HotkeyItemOptions?
];

export function useInvenTreeHotkeys(_keys: InvenTreeHotkeyItem[]) {
  const keyelems: [string, string][] = _keys.map(([key, description]) => [
    key,
    description
  ]);

  const mappedHotkeys: [
    string,
    (event: KeyboardEvent) => void,
    HotkeyItemOptions?
  ][] = _keys.map(([key, _, handler, options]) => [key, handler, options]);
  // Register the hotkeys using the Mantine hook
  useHotkeys(mappedHotkeys);

  // register to helper state to store hotkeys
  // This allows us to display the hotkeys in the UI
  useEffect(() => {
    useLocalLibState.getState().addHotkeys(keyelems);
    return () =>
      useLocalLibState.getState().removeHotkeys(keyelems.map(([key]) => key));
  }, []);
}
