/**
 * Exposes a set of APIs to the renderer process via the contextBridge object.
 * @module preload
 */

import { APIEvents, APIRoutes } from '@janhq/core'
import { contextBridge, ipcRenderer } from 'electron'

const interfaces: { [key: string]: (...args: any[]) => any } = {}

// Loop over each route in APIRoutes
APIRoutes.forEach((method) => {
  // For each method, create a function on the interfaces object
  // This function invokes the method on the ipcRenderer with any provided arguments
  interfaces[method] = (...args: any[]) => ipcRenderer.invoke(method, ...args)
})

// Loop over each method in APIEvents
APIEvents.forEach((method) => {
  // For each method, create a function on the interfaces object
  // This function sets up an event listener on the ipcRenderer for the method
  // The handler for the event is provided as an argument to the function
  interfaces[method] = (handler: any) => ipcRenderer.on(method, handler)
})
// Expose the 'interfaces' object in the main world under the name 'electronAPI'
// This allows the renderer process to access these methods directly
contextBridge.exposeInMainWorld('electronAPI', {
  ...interfaces,
})
