1*2973963eSXiaochao Ma #pragma once
2*2973963eSXiaochao Ma 
3*2973963eSXiaochao Ma #include "app.hpp"
4*2973963eSXiaochao Ma #include "query.hpp"
5*2973963eSXiaochao Ma #include "registries/privilege_registry.hpp"
6*2973963eSXiaochao Ma #include "utils/chassis_utils.hpp"
7*2973963eSXiaochao Ma #include "utils/json_utils.hpp"
8*2973963eSXiaochao Ma 
9*2973963eSXiaochao Ma namespace redfish
10*2973963eSXiaochao Ma {
11*2973963eSXiaochao Ma 
12*2973963eSXiaochao Ma inline void doThermalSubsystemCollection(
13*2973963eSXiaochao Ma     const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
14*2973963eSXiaochao Ma     const std::string& chassisId,
15*2973963eSXiaochao Ma     const std::optional<std::string>& validChassisPath)
16*2973963eSXiaochao Ma {
17*2973963eSXiaochao Ma     if (!validChassisPath)
18*2973963eSXiaochao Ma     {
19*2973963eSXiaochao Ma         BMCWEB_LOG_ERROR << "Not a valid chassis ID" << chassisId;
20*2973963eSXiaochao Ma         messages::resourceNotFound(asyncResp->res, "Chassis", chassisId);
21*2973963eSXiaochao Ma         return;
22*2973963eSXiaochao Ma     }
23*2973963eSXiaochao Ma     asyncResp->res.jsonValue["@odata.type"] =
24*2973963eSXiaochao Ma         "#ThermalSubsystem.v1_0_0.ThermalSubsystem";
25*2973963eSXiaochao Ma     asyncResp->res.jsonValue["Name"] = "Thermal Subsystem";
26*2973963eSXiaochao Ma     asyncResp->res.jsonValue["Id"] = "ThermalSubsystem";
27*2973963eSXiaochao Ma 
28*2973963eSXiaochao Ma     asyncResp->res.jsonValue["@odata.id"] = crow::utility::urlFromPieces(
29*2973963eSXiaochao Ma         "redfish", "v1", "Chassis", chassisId, "ThermalSubsystem");
30*2973963eSXiaochao Ma 
31*2973963eSXiaochao Ma     asyncResp->res.jsonValue["Status"]["State"] = "Enabled";
32*2973963eSXiaochao Ma     asyncResp->res.jsonValue["Status"]["Health"] = "OK";
33*2973963eSXiaochao Ma }
34*2973963eSXiaochao Ma 
35*2973963eSXiaochao Ma inline void handleThermalSubsystemCollectionGet(
36*2973963eSXiaochao Ma     App& app, const crow::Request& req,
37*2973963eSXiaochao Ma     const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
38*2973963eSXiaochao Ma     const std::string& param)
39*2973963eSXiaochao Ma {
40*2973963eSXiaochao Ma     if (!redfish::setUpRedfishRoute(app, req, asyncResp))
41*2973963eSXiaochao Ma     {
42*2973963eSXiaochao Ma         return;
43*2973963eSXiaochao Ma     }
44*2973963eSXiaochao Ma     const std::string& chassisId = param;
45*2973963eSXiaochao Ma 
46*2973963eSXiaochao Ma     redfish::chassis_utils::getValidChassisPath(
47*2973963eSXiaochao Ma         asyncResp, chassisId,
48*2973963eSXiaochao Ma         std::bind_front(doThermalSubsystemCollection, asyncResp, chassisId));
49*2973963eSXiaochao Ma }
50*2973963eSXiaochao Ma 
51*2973963eSXiaochao Ma inline void requestRoutesThermalSubsystem(App& app)
52*2973963eSXiaochao Ma {
53*2973963eSXiaochao Ma     BMCWEB_ROUTE(app, "/redfish/v1/Chassis/<str>/ThermalSubsystem/")
54*2973963eSXiaochao Ma         .privileges(redfish::privileges::getThermalSubsystem)
55*2973963eSXiaochao Ma         .methods(boost::beast::http::verb::get)(std::bind_front(
56*2973963eSXiaochao Ma             handleThermalSubsystemCollectionGet, std::ref(app)));
57*2973963eSXiaochao Ma }
58*2973963eSXiaochao Ma 
59*2973963eSXiaochao Ma } // namespace redfish
60