#include "buildjson/buildjson.hpp"

#include "errors/exception.hpp"

#include <nlohmann/json.hpp>

#include <fstream>

using json = nlohmann::json;

void validateJson(const json& data)
{
    if (data.count("sensors") != 1)
    {
        throw ConfigurationException(
            "KeyError: 'sensors' not found (or found repeatedly)");
    }

    if (data["sensors"].size() == 0)
    {
        throw ConfigurationException(
            "Invalid Configuration: At least one sensor required");
    }

    if (data.count("zones") != 1)
    {
        throw ConfigurationException(
            "KeyError: 'zones' not found (or found repeatedly)");
    }

    for (const auto& zone : data["zones"])
    {
        if (zone.count("pids") != 1)
        {
            throw ConfigurationException(
                "KeyError: should only have one 'pids' key per zone.");
        }

        if (zone["pids"].size() == 0)
        {
            throw ConfigurationException(
                "Invalid Configuration: must be at least one pid per zone.");
        }
    }
}

json parseValidateJson(const std::string& path)
{
    std::ifstream jsonFile(path);
    if (!jsonFile.is_open())
    {
        throw ConfigurationException("Unable to open json file");
    }

    auto data = json::parse(jsonFile, nullptr, false);
    if (data.is_discarded())
    {
        throw ConfigurationException("Invalid json - parse failed");
    }

    /* Check the data. */
    validateJson(data);

    return data;
}
