import { useEffect } from 'react';
import { useRecoilValue } from 'recoil';

import { customHotkeysScopesState } from '@/hotkeys/states/internal/customHotkeysScopesState';
import { hotkeysScopeStackState } from '@/hotkeys/states/internal/hotkeysScopeStackState';
import { InternalHotkeysScope } from '@/hotkeys/types/internal/InternalHotkeysScope';

import { useHotkeysScope } from './useHotkeysScope';

export function useHotkeysScopeStackAutoSync() {
  const { setHotkeysScopes } = useHotkeysScope();

  const hotkeysScopeStack = useRecoilValue(hotkeysScopeStackState);
  const customHotkeysScopes = useRecoilValue(customHotkeysScopesState);
  useEffect(() => {
    if (hotkeysScopeStack.length === 0) {
      return;
    }

    const scopesToSet: string[] = [];

    const currentHotkeysScope = hotkeysScopeStack[hotkeysScopeStack.length - 1];

    if (currentHotkeysScope.customScopes?.['command-menu']) {
      scopesToSet.push(InternalHotkeysScope.CommandMenu);
    }

    if (currentHotkeysScope?.customScopes?.goto) {
      scopesToSet.push(InternalHotkeysScope.Goto);
    }

    scopesToSet.push(currentHotkeysScope.scope);

    setHotkeysScopes(scopesToSet);
  }, [setHotkeysScopes, customHotkeysScopes, hotkeysScopeStack]);
}
