{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "https://anl-ceeesa.github.io/RELOG/input",
  "title": "Schema for RELOG Input File",
  "definitions": {
    "TimeSeries": {
      "type": "array",
      "items": {
        "type": "number"
      }
    },
    "Parameters": {
      "type": "object",
      "properties": {
        "time horizon (years)": {
          "type": "number"
        },
        "distance metric": {
          "type": "string"
        }
      },
      "required": ["time horizon (years)"]
    },
    "Plant": {
      "type": "object",
      "additionalProperties": {
        "type": "object",
        "properties": {
          "input": {
            "type": "string"
          },
          "outputs (tonne/tonne)": {
            "type": "object",
            "additionalProperties": {
              "type": "number"
            }
          },
          "energy (GJ/tonne)": {
            "$ref": "#/definitions/TimeSeries"
          },
          "emissions (tonne/tonne)": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/definitions/TimeSeries"
            }
          },
          "locations": {
            "$ref": "#/definitions/PlantLocation"
          }
        },
        "required": ["input", "locations"]
      }
    },
    "PlantLocation": {
      "type": "object",
      "additionalProperties": {
        "type": "object",
        "properties": {
          "location": {
            "type": "string"
          },
          "latitude (deg)": {
            "type": "number"
          },
          "longitude (deg)": {
            "type": "number"
          },
          "initial capacity (tonne)": {
            "type": "number"
          },
          "disposal": {
            "type": "object",
            "additionalProperties": {
              "type": "object",
              "properties": {
                "cost ($/tonne)": {
                  "$ref": "#/definitions/TimeSeries"
                },
                "limit (tonne)": {
                  "$ref": "#/definitions/TimeSeries"
                }
              },
              "required": ["cost ($/tonne)"]
            }
          },
          "storage": {
            "type": "object",
            "properties": {
              "cost ($/tonne)": {
                "$ref": "#/definitions/TimeSeries"
              },
              "limit (tonne)": {
                "type": "number"
              }
            },
            "required": ["cost ($/tonne)", "limit (tonne)"]
          },
          "capacities (tonne)": {
            "type": "object",
            "additionalProperties": {
              "type": "object",
              "properties": {
                "variable operating cost ($/tonne)": {
                  "$ref": "#/definitions/TimeSeries"
                },
                "fixed operating cost ($)": {
                  "$ref": "#/definitions/TimeSeries"
                },
                "opening cost ($)": {
                  "$ref": "#/definitions/TimeSeries"
                }
              },
              "required": [
                "variable operating cost ($/tonne)",
                "fixed operating cost ($)",
                "opening cost ($)"
              ]
            }
          }
        },
        "required": ["capacities (tonne)"]
      }
    },
    "InitialAmount": {
      "type": "object",
      "additionalProperties": {
        "type": "object",
        "properties": {
          "location": {
            "type": "string"
          },
          "latitude (deg)": {
            "type": "number"
          },
          "longitude (deg)": {
            "type": "number"
          },
          "amount (tonne)": {
            "$ref": "#/definitions/TimeSeries"
          }
        },
        "required": ["amount (tonne)"]
      }
    },
    "Product": {
      "type": "object",
      "additionalProperties": {
        "type": "object",
        "properties": {
          "transportation cost ($/km/tonne)": {
            "$ref": "#/definitions/TimeSeries"
          },
          "transportation energy (J/km/tonne)": {
            "$ref": "#/definitions/TimeSeries"
          },
          "transportation emissions (tonne/km/tonne)": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/definitions/TimeSeries"
            }
          },
          "initial amounts": {
            "$ref": "#/definitions/InitialAmount"
          },
          "disposal limit (tonne)": {
            "$ref": "#/definitions/TimeSeries"
          },
          "disposal cost ($/tonne)": {
            "$ref": "#/definitions/TimeSeries"
          },
          "acquisition cost ($/tonne)": {
            "$ref": "#/definitions/TimeSeries"
          }
        },
        "required": ["transportation cost ($/km/tonne)"]
      }
    }
  },
  "type": "object",
  "properties": {
    "parameters": {
      "$ref": "#/definitions/Parameters"
    },
    "plants": {
      "$ref": "#/definitions/Plant"
    },
    "products": {
      "$ref": "#/definitions/Product"
    }
  },
  "required": ["parameters", "plants", "products"]
}
