const electron = require('electron');
const fs = require('fs');
const path = require('path');

let blobId = 0;
let blobRequests = {};

electron.ipcRenderer.on('blob-loaded', (event, args) => {
	const blobRequest = blobRequests[args.id];
	delete blobRequests[args.id];
	blobRequest.done(new Uint8Array(args.data));
});

electron.ipcRenderer.on('blob-failed', (event, args) => {
	const blobRequest = blobRequests[args.id];
	delete blobRequests[args.id];
	blobRequest.failed({url: args.url, error: args.error});
});

electron.contextBridge.exposeInMainWorld(
	'electron', {
		{Expose}
		showWindow: (title, x, y, width, height) => {
			if (electron.webFrame.setZoomLevelLimits != null) { // TODO: Figure out why this check is sometimes required
				electron.webFrame.setZoomLevelLimits(1, 1);
			}
			const options = {
				title: title,
				x: x,
				y: y,
				width: width,
				height: height,
			};
			electron.ipcRenderer.send('show-window', options);
		},
		loadBlob: (desc, done, failed) => {
			const options = {
				file: desc.files[0],
				id: blobId++
			};
			blobRequests[options.id] = {
				done: done,
				failed: failed
			};
			electron.ipcRenderer.send('load-blob', options);
		}
	}
);