#include "tlbmc/redfish/routes/service_root.h"

#include "nlohmann/json.hpp"
#include "tlbmc/redfish/app.h"
#include "tlbmc/redfish/request.h"
#include "tlbmc/redfish/response.h"

namespace milotic_tlbmc::service_root {

namespace {

void HandleRedfish(const RedfishRequest& req, RedfishResponse& resp) {
  resp.SetKeyInJsonBody("/v1"_json_pointer, "/redfish/v1");
}

void HandleRedfishV1(const RedfishRequest& req, RedfishResponse& resp) {
  resp.SetKeyInJsonBody("/@odata.id", "/redfish/v1");
  resp.SetKeyInJsonBody("/@odata.type", "#ServiceRoot.v1_14_0.ServiceRoot");
  resp.SetKeyInJsonBody("/@odata.version", "4.0");
  resp.SetKeyInJsonBody("/RedfishVersion", "1.14.0");
  resp.SetKeyInJsonBody("/Name", "Root Service");
  resp.SetKeyInJsonBody("/Cables/@odata.id", "/redfish/v1/Cables");
  resp.SetKeyInJsonBody("/Chassis/@odata.id", "/redfish/v1/Chassis");
  resp.SetKeyInJsonBody("/Id", "RootService");
  resp.SetKeyInJsonBody("/Oem/tlbmc/TlBMCService", "/redfish/tlbmc");
}

}  // namespace

void RegisterRoutes(RedfishApp& app) {
  TLBMC_ROUTE(app, "/redfish/")
      .methods(boost::beast::http::verb::get)(HandleRedfish);

  TLBMC_ROUTE(app, "/redfish/v1/")
      .methods(boost::beast::http::verb::get)(HandleRedfishV1);
}

}  // namespace milotic_tlbmc::service_root
