import DefaultSettings from './default';
import * as settingsValues from './values';

const loadRaw = () => {
  return browser.storage.local.get('settings').then(({ settings }) => {
    if (!settings) {
      return DefaultSettings;
    }
    return Object.assign({}, DefaultSettings, settings);
  });
};

const loadValue = () => {
  return loadRaw().then((settings) => {
    let value = JSON.parse(DefaultSettings.json);
    if (settings.source === 'json') {
      value = settingsValues.valueFromJson(settings.json);
    } else if (settings.source === 'form') {
      value = settingsValues.valueFromForm(settings.form);
    }
    if (!value.properties) {
      value.properties = {};
    }
    return Object.assign({},
      settingsValues.valueFromJson(DefaultSettings.json),
      value);
  });
};

const save = (settings) => {
  return browser.storage.local.set({
    settings,
  });
};

export { loadRaw, loadValue, save };