// Settings menu for the enhanced Anton clock

(function(back) {
  var FILE = "antonclk.json";
  var settings = Object.assign({
    secondsOnUnlock: false,
  }, require('Storage').readJSON(FILE, true) || {});

  function writeSettings() {
    require('Storage').writeJSON(FILE, settings);
  }

  // Helper method which uses int-based menu item for set of string values
  function stringItems(startvalue, writer, values) {
    return {
      value: (startvalue === undefined ? 0 : values.indexOf(startvalue)),
      format: v => values[v],
      min: 0,
      max: values.length - 1,
      wrap: true,
      step: 1,
      onchange: v => {
        writer(values[v]);
        writeSettings();
      }
    };
  }

  // Helper method which breaks string set settings down to local settings object
  function stringInSettings(name, values) {
    return stringItems(settings[name], v => settings[name] = v, values);
  }

  var mainmenu = {
    "": {
      "title": "Anton clock"
    },
    "< Back": () => back(),
    "Seconds...": () => E.showMenu(secmenu),
    "Date": stringInSettings("dateOnMain", ["Long", "Short", "ISO8601"]),
    "Show Weekday": {
      value: (settings.weekDay !== undefined ? settings.weekDay : true),
      onchange: v => {
        settings.weekDay = v;
        writeSettings();
      }
    },
    "Show CalWeek": {
      value: (settings.calWeek !== undefined ? settings.calWeek : false),
      onchange: v => {
        settings.calWeek = v;
        writeSettings();
      }
    },
    "Uppercase": {
      value: (settings.upperCase !== undefined ? settings.upperCase : true),
      onchange: v => {
        settings.upperCase = v;
        writeSettings();
      }
    },
    "Vector font": {
      value: (settings.vectorFont !== undefined ? settings.vectorFont : false),
      onchange: v => {
        settings.vectorFont = v;
        writeSettings();
      }
    },
  };

  // Submenu
  var secmenu = {
    "": {
      "title": "Show seconds..."
    },
    "< Back": () => E.showMenu(mainmenu),
    "Show": stringInSettings("secondsMode", ["Never", "Unlocked", "Always"]),
    "With \":\"": {
      value: (settings.secondsWithColon !== undefined ? settings.secondsWithColon : true),
      onchange: v => {
        settings.secondsWithColon = v;
        writeSettings();
      }
    },
    "Color": {
      value: (settings.secondsColoured !== undefined ? settings.secondsColoured : true),
      onchange: v => {
        settings.secondsColoured = v;
        writeSettings();
      }
    },
    "Date": stringInSettings("dateOnSecs", ["Year", "Weekday", "No"])
  };

  E.showMenu(mainmenu);

});
