import { useEffect, useState } from 'react';

import { ipcChannels } from '../../../shared/ipc/contracts';
import type { NpcsOverlayEvent, NpcsOverlayState } from '../../../shared/types';
import { getDndApi } from '../dndApi';

export function useNpcsOverlayState(): readonly [
  NpcsOverlayState | null,
  { dispatch: (event: NpcsOverlayEvent) => Promise<void> },
] {
  const api = getDndApi();
  const [state, setState] = useState<NpcsOverlayState | null>(null);

  useEffect(() => {
    void api.invoke(ipcChannels.npcsOverlay.getState, {}).then((r) => {
      setState(r.state);
    });
    return api.on(ipcChannels.npcsOverlay.stateChanged, ({ state: next }) => {
      setState(next);
    });
  }, [api]);

  return [
    state,
    {
      dispatch: async (event) => {
        await api.invoke(ipcChannels.npcsOverlay.dispatch, { event });
      },
    },
  ] as const;
}
