const { contextBridge, ipcRenderer } = require('electron');
// White-listed channels.
const ipc = {
    'render': {
        // From render to main.
        'send': [
            'close',
            'maximize',
            'minimze',
            'login',
            'register',
        ],
        // From main to render.
        'receive': [
            'close',
            'maximize',
            'minimze',
            'login',
            'register',
        ],
        // From render to main and back again.
        'sendReceive':[
            'close',
            'maximize',
            'minimze',
            'login',
            'register',
        ]
    }
};

// Exposed protected methods in the render process.
contextBridge.exposeInMainWorld(
    // Allowed 'ipcRenderer' methods.
    'ipcRender', {
        // From render to main.
        send: (channel, args) => {
            let validChannels = ipc.render.send;
            if (validChannels.includes(channel)) {
                ipcRenderer.send(channel, args);
            }
        },
        // From main to render.
        receive: (channel, listener) => {
            let validChannels = ipc.render.receive;
            if (validChannels.includes(channel)) {
                // Deliberately strip event as it includes `sender`.
                ipcRenderer.on(channel, (event, ...args) => listener(...args));
            }
        },
        // From render to main and back again.
        invoke: (channel, args) => {
            let validChannels = ipc.render.sendReceive;
            if (validChannels.includes(channel)) {
                return ipcRenderer.invoke(channel, args);
            }
        }
    }
);