const importConfiguration = (configuration) => {
    // TODO Check for version to support older versions

    // Re-init UI by clearing everything (copy the array first as it will be mutated during the iteration)
    [...configurationCleaners].forEach(cleaner => cleaner());

    configuration.pyinstallerOptions.forEach(({ optionDest, value }) => {
        if (configurationSetters.hasOwnProperty(optionDest)) {
            configurationSetters[optionDest](value);
        } else {
            // TODO Warn user?
            // TODO noconfirm is expected to come here
        }
    });

    // setup nonPyinstallerOptions
    recursionLimitToggle(configuration.nonPyinstallerOptions.increaseRecursionLimit);
    document.getElementById('raw-arguments').value = configuration.nonPyinstallerOptions.manualArguments;
    if ('outputDirectory' in configuration.nonPyinstallerOptions) {
        document.getElementById('output-directory').value = configuration.nonPyinstallerOptions.outputDirectory;
    }
};

const _collectDataToExport = () => {
    const nonPyinstallerConfiguration = getNonPyinstallerConfiguration();
    delete nonPyinstallerConfiguration.outputDirectory; // This does not need to be saved in the config

    return {
        version: "auto-py-to-exe-configuration_v1",
        pyinstallerOptions: getCurrentConfiguration(),
        nonPyinstallerOptions: nonPyinstallerConfiguration
    }
};

const onConfigurationImport = async () => {
    if (!isCommandDefault()) {
        const response = await displayModal(
            getTranslation('dynamic.modal.configModalTitle'),
            getTranslation('dynamic.modal.configModalDescription'),
            [
                getTranslation('dynamic.modal.configModalConfirmButton'),
                getTranslation('dynamic.modal.configModalCancelButton')
            ]);

        if (response !== getTranslation('dynamic.modal.configModalConfirmButton'))
            return;
    }

    const data = await eel.import_configuration()();
    importConfiguration(data);
};

const onConfigurationExport = async () => {
    const data = _collectDataToExport();
    await eel.export_configuration(data)();
};
