
(function() {
      var definitions = {
	        "time": {
                  "type": "string",
                  "format": "time"
                },
	        "schedule_item": {
                  "type": "object",
                  "properties": {
      	            "time": {
      	              "$ref": "#/definitions/time",
      	              // "description": "Start time, when this schedule item should fire"
      	            },
                    "lamp": {
                      "type": "string",
                      "watch": {
                        "lamps": "lampmapping"
                      },
                      "enumSource": [{ "source": "lamps", "value": "{{item}}" }]
                    },
                    "color": {
                      "type": "string",
                      "watch": { "selectableColors": "colors" },
                      "enumSource" : [{ "source": "selectableColors", "value": "{{item.name}}" }]
                      // "description": "Name of the color to be shown; corresponds to color name in color definitions."
                    },
                    "mode": {
                      "type": "string",
                      // "description": "Dynamic behaviour / mode; allowed values are: OnOff",
                      "enum": ["OnOff", "Ramp", "Neon-on"]
                    }
                  }
                }
            };
      var colorsProperties = {
                  "description": "DLite color definition",
                  "type": "array",
                  "format": "table",
                  "uniqueItems": true,
                  "disable_collapse": true,
                  "items": {
                    "type": "object",
                    "description": "Color definition",
                    "properties": {
                      "name": {
                        "type": "string",
                        /*"description": "Color name used as identifier"*/
                      },
                      "color": {
                        "type": "string",
                        "format": "color",
                        /*"description": "Color definition"*/
                      }
                    }
                  }
          };
      var lampmappingProperties = {
	          "type": "array",
                  "format": "table",
                  "description": "LED/Lamp names, used as identifier; order according to LED address",
	          "items": {
		    "type": "string"
	          }
          };
      var settingsProperties = {
	          "description": "DLite settings",
	          "type": "object",
	          "properties": {
	            "comment": {
	              "type": "string",
                      "format": "textarea",
	              "description": "Info about this schedule definition"
	            },
	            "mrclock": {
	              "type": "string",
	              "description": "Name of a MR-Clock fastclock"
	            },
	            "clock_starttime": {
	              "$ref": "#/definitions/time",
	              "description": "After boot, at which  clock should this start to animate?"
	            },
	            "clock_speed": {
                      "type": "number",
                      "description": "Real time seconds for every model minute"
                    },
                  },
          };
      var scheduleProperties = {
	          "description": "DLite schedule definition",
	          "type": "array",
                  "format": "table",
	          // "description": "The schedule definition as an array of schedule items",
                  "items": { "$ref": "#/definitions/schedule_item" }
          };
      var schema = {
              "$schema": "http://json-schema.org/draft-06/schema#",
              "description": "DLite Light Controller Configuration",
              "type": "object",
              "properties": {
                "colors": colorsProperties,
	        "lampmapping": lampmappingProperties,
                "settings": settingsProperties,
                "schedule": scheduleProperties,
              },
              "definitions": definitions
            };
  window.schema = schema;
})();

