#include "resource_uri_override.h"

#include <algorithm>
#include <string>

#include "absl/strings/str_cat.h"
#include "absl/strings/string_view.h"
#include "authorizer_enums.h"
#include "override.h"

namespace milotic::authz {

// This is applicable if the operation is contained in the operation_map
// and if uri is found in override_targets
bool ResourceUriOverride::IsApplicable(absl::string_view uri,
                                       ecclesia::Operation operation) const {
  if (uri.empty() || !operation_map_.contains(operation)) {
    return false;
  }

  // We need to check both uris that end in a / and uris that don't.
  //  '/redfish/v1' should be treated the same as '/redfish/v1/'
  std::string other_uri;
  if (uri.back() == '/') {
    other_uri = uri.substr(0, uri.size() - 1);
  } else {
    other_uri = absl::StrCat(uri, "/");
  }

  // If either uri or other uri is found, return true
  return std::find(override_targets_.begin(), override_targets_.end(), uri) !=
             override_targets_.end() ||
         std::find(override_targets_.begin(), override_targets_.end(),
                   other_uri) != override_targets_.end();
}

Override::Type ResourceUriOverride::GetOverrideType() const {
  return Override::kResourceUriOverride;
}

}  // namespace milotic::authz
