#ifndef THIRD_PARTY_GBMCWEB_INCLUDE_FORWARD_UNAUTHORIZED_H_
#define THIRD_PARTY_GBMCWEB_INCLUDE_FORWARD_UNAUTHORIZED_H_

#include <string_view>

#include "http_response.hpp"
#include "http_utility.hpp"
#include "sessions.hpp"

namespace forward_unauthorized {

// NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables)
static bool hasWebuiRoute = false;

inline void sendUnauthorized(std::string_view url,
                             std::string_view xRequestedWith,
                             std::string_view accept, crow::Response& res) {
  // If it's a browser connecting, don't send the HTTP authenticate
  // header, to avoid possible CSRF attacks with basic auth
  if (http_helpers::isContentTypeAllowed(
          accept, http_helpers::ContentType::HTML, false /*allowWildcard*/)) {
    // If we have a webui installed, redirect to that login page
    if (hasWebuiRoute) {
      res.result(boost::beast::http::status::temporary_redirect);
      res.addHeader(boost::beast::http::field::location,
                    "/#/login?next=" + http_helpers::urlEncode(url));
      return;
    }
    // If we don't have a webui installed, just return an unauthorized
    // body
    res.result(boost::beast::http::status::unauthorized);
    res.body() = "Unauthorized";
    return;
  }

  res.result(boost::beast::http::status::unauthorized);

  // XHR requests from a browser will set the X-Requested-With header when
  // doing their requests, even though they might not be requesting html.
  if (!xRequestedWith.empty()) {
    return;
  }
  // if basic auth is disabled, don't propose it.
  if (!persistent_data::SessionStore::getInstance()
           .getAuthMethodsConfig()
           .basic) {
    return;
  }
  res.addHeader(boost::beast::http::field::www_authenticate, "Basic");
}
}  // namespace forward_unauthorized

#endif  // THIRD_PARTY_GBMCWEB_INCLUDE_FORWARD_UNAUTHORIZED_H_
