#include "override.h"

#include <string>

#include "absl/strings/string_view.h"
#include "authorizer_enums.h"
#include "nlohmann/json.hpp"
#include "redfish_privileges.h"

namespace milotic::authz {

bool Override::IsPeerAuthorized(
    absl::string_view uri, ecclesia::Operation operation,
    const RedfishPrivileges& peer_privileges) const {
  if (!IsApplicable(uri, operation)) {
    return false;
  }

  for (const RedfishPrivileges& privilegeSet : operation_map_.at(operation)) {
    if (peer_privileges.IsSupersetOf(privilegeSet)) {
      return true;
    }
  }
  return false;
}

nlohmann::json::object_t Override::ToJson() const {
  nlohmann::json::object_t json;

  json["Targets"] = nlohmann::json::array_t();
  for (const std::string& target : override_targets_) {
    json["Targets"].push_back(target);
  }

  for (const auto& it : operation_map_) {
    json["OperationMap"][ecclesia::OperationToString(it.first)] =
        nlohmann::json::array_t();
    for (const RedfishPrivileges& privilege_set : it.second) {
      json["OperationMap"][ecclesia::OperationToString(it.first)].push_back(
          privilege_set.ToJson());
    }
  }

  return json;
}
}  // namespace milotic::authz
