import { contextBridge, ipcRenderer } from "electron";

import Channels from "./constants";
import { STORE_ITEMS } from "./constants";

const electronAPI = {
  auth: {
    initiateLogin() {
      ipcRenderer.send(Channels.ACTIVATE_LOG_IN);
    },
  },
  store: {
    get(val: STORE_ITEMS) {
      return ipcRenderer.invoke("electron-store-get", val);
    },
    set(property: STORE_ITEMS, val: any) {
      ipcRenderer.send("electron-store-set", property, val);
    },
    // Other method you want to add like has(), reset(), etc.
  },

  window: {
    resizeWindow(newDimensions: { width: number; height: number }) {
      ipcRenderer.send(Channels.RESIZE_WINDOW, newDimensions);
    },
  },

  on(channel: Channels, func: any) {
    const validChannels = ["ipc-example"];
    // if (validChannels.includes(channel)) {
    //   // Deliberately strip event as it includes `sender`
    //   ipcRenderer.on(channel, (event, ...args) => func(...args));
    // }

    ipcRenderer.on(channel, (event, ...args) => func(...args));
  },
  once(channel: Channels, func: any) {
    // const validChannels = ["ipc-example"];
    // if (validChannels.includes(channel)) {
    //   // Deliberately strip event as it includes `sender`
    //   ipcRenderer.once(channel, (event, ...args) => func(...args));
    // }

    ipcRenderer.once(channel, (event, ...args) => func(...args));
  },
};

contextBridge.exposeInMainWorld("electronAPI", electronAPI);

export default electronAPI;
