const configstore = require('configstore');
const pkg = require('../../package.json');
const conf = new configstore(pkg.name);

const {app} = require('electron');
app.allowRendererProcessReuse = true

let translationKey = conf.get('lang')
if (translationKey === undefined) {
    translationKey = 'en-US'
    conf.set('lang', translationKey)
}

const path = require('path')

const langTranslations = {
    'en-US': require('../translation/en-US'),
    'de-DE': require('../translation/de-DE'),
    'pt-BR': require('../translation/pt-BR'),
    'es-ES': require('../translation/es-ES'),
}

const translation = langTranslations[translationKey]

global.p3x = {
    onenote: {
        pkg: pkg,
        lang: translation,
        translationKey: translationKey,
        translations: undefined,
        title: translation.title,
        conf: conf,
        disableHide: true,
        allowMultiple: false,
        optionToDisableInternalExternalPopup: false,
        iconFile: path.resolve(`${__dirname}/images/256x256.png`),
        tray: undefined,
        window: {
            onenote: undefined,
        },
        action: undefined,
        menus: undefined,
        mainMenu: undefined,
        setVisible: undefined,
        createWindow: {
            onenote: undefined,
        },
        isVisible: () => {
            return global.p3x.onenote.window.onenote.isVisible() && global.p3x.onenote.window.onenote.isFocused()
        }
    }
}

global.p3x.onenote.translations = langTranslations

// configuration
global.p3x.onenote.disableHide = conf.get('disable-hide')
if (global.p3x.onenote.disableHide === undefined) {
    conf.set('disable-hide', true)
    global.p3x.onenote.disableHide = true;
}

// configuration
global.p3x.onenote.optionToDisableInternalExternalPopup = conf.get('option-to-disable-internal-external-popup')
if (global.p3x.onenote.optionToDisableInternalExternalPopup === undefined) {
    conf.set('option-to-disable-internal-external-popup', false)
    global.p3x.onenote.optionToDisableInternalExternalPopup = false;
}

// configuration
global.p3x.onenote.allowMultiple = conf.get('allow-multiple')
if (global.p3x.onenote.allowMultiple === undefined) {
    conf.set('allow-multiple', false)
    global.p3x.onenote.allowMultiple = false;
}

// loading
global.p3x.onenote.action = require('./main/action');
global.p3x.onenote.menus = require('./main/menus');
global.p3x.onenote.mainMenu = require('./main/create/menu')
global.p3x.onenote.mainTray = require('./main/create/tray')
global.p3x.onenote.setVisible = require('./main/set-visible')
global.p3x.onenote.createWindow.onenote = require('./main/create/window/onenote')


if (global.p3x.onenote.allowMultiple === false) {
    const semver = require('semver')
    if (semver.gt(process.versions.electron === undefined ? '4.0.0' : process.versions.electron, '3.0.0')) {
        const gotTheLock = app.requestSingleInstanceLock()

        app.on('second-instance', (event, commandLine, workingDirectory) => {
            // Someone tried to run a second instance, we should focus our window.
            global.p3x.onenote.setVisible(true);
            //global.p3x.onenote.window.onenote.webContents.reload();
        })

        if (!gotTheLock) {
            app.quit()
            return
        }

    } else {
        const isSecondInstance = app.makeSingleInstance((commandLine, workingDirectory) => {
            global.p3x.onenote.setVisible(true);
            //global.p3x.onenote.window.onenote.webContents.reload();
        })

        if (isSecondInstance) {
            return app.quit()
        }
    }
}


// app and ipc main events and configuration
require('./main/ipc-main')
require('./main/app-events')