#include "override_json.h"

#include "authorizer_enums.h"
#include <nlohmann/json.hpp>
#include "override.h"
#include "redfish_privileges.h"
#include "redfish_privileges_json.h"

namespace milotic::authz {

nlohmann::json::object_t OverrideToJson(const Override& override) {
  nlohmann::json::object_t json;

  json["Targets"] = override.GetOverrideTargets();

  for (const auto& [operation, privilege_sets] : override.GetOperationMap()) {
    nlohmann::json& operation_json =
        json["OperationMap"][ecclesia::OperationToString(operation)];
    operation_json = nlohmann::json::array_t();
    for (const RedfishPrivileges& privilege_set : privilege_sets) {
      operation_json.push_back(RedfishPrivilegesToJson(privilege_set));
    }
  }

  return json;
}

}  // namespace milotic::authz
