# RELOG: Reverse Logistics Optimization
# Copyright (C) 2020, UChicago Argonne, LLC. All rights reserved.
# Released under the modified BSD license. See COPYING.md for more details.

using DataStructures
using JSON
using JSONSchema
using Printf
using Statistics

mutable struct Product
    name::String
    transportation_cost::Vector{Float64}
    transportation_energy::Vector{Float64}
    transportation_emissions::Dict{String,Vector{Float64}}
end

mutable struct CollectionCenter
    index::Int64
    name::String
    latitude::Float64
    longitude::Float64
    product::Product
    amount::Vector{Float64}
end

mutable struct PlantSize
    capacity::Float64
    variable_operating_cost::Vector{Float64}
    fixed_operating_cost::Vector{Float64}
    opening_cost::Vector{Float64}
end

mutable struct Plant
    index::Int64
    plant_name::String
    location_name::String
    input::Product
    output::Dict{Product,Float64}
    latitude::Float64
    longitude::Float64
    disposal_limit::Dict{Product,Vector{Float64}}
    disposal_cost::Dict{Product,Vector{Float64}}
    sizes::Vector{PlantSize}
    energy::Vector{Float64}
    emissions::Dict{String,Vector{Float64}}
    storage_limit::Float64
    storage_cost::Vector{Float64}
end

mutable struct Instance
    time::Int64
    products::Vector{Product}
    collection_centers::Vector{CollectionCenter}
    plants::Vector{Plant}
    building_period::Vector{Int64}
end
