import { remote } from 'electron';
import { useCallback, useEffect } from 'react';
import { useDispatch, useSelector } from 'react-redux';
import { isElectronWindowFocused } from '../session/utils/WindowUtils';
import { setIsAppFocused } from '../state/ducks/section';
import { getIsAppFocused } from '../state/selectors/section';

export function useAppIsFocused() {
  const dispatch = useDispatch();
  const isFocused = useSelector(getIsAppFocused);

  useEffect(() => {
    dispatch(setIsAppFocused(isElectronWindowFocused()));
  }, []);

  const onFocusCallback = useCallback((_event, win) => {
    if (win.webContents.id === 1) {
      dispatch(setIsAppFocused(true));
    }
  }, []);

  const onBlurCallback = useCallback((_event, win) => {
    if (win.webContents.id === 1) {
      dispatch(setIsAppFocused(false));
    }
  }, []);

  useEffect(() => {
    remote.app.on('browser-window-focus', onFocusCallback);
    remote.app.on('browser-window-blur', onBlurCallback);
    return () => {
      remote.app.removeListener('browser-window-blur', onBlurCallback);
      remote.app.removeListener('browser-window-focus', onFocusCallback);
    };
  });

  return isFocused;
}