176833cb5SWludzik, Jozef #pragma once
276833cb5SWludzik, Jozef 
3a4e67616SCezary Zwolak #include "interfaces/json_storage.hpp"
494f71c51SSzymon Dompke #include "interfaces/sensor.hpp"
594f71c51SSzymon Dompke #include "interfaces/threshold.hpp"
676833cb5SWludzik, Jozef #include "interfaces/trigger.hpp"
776833cb5SWludzik, Jozef #include "interfaces/trigger_manager.hpp"
894f71c51SSzymon Dompke #include "sensor.hpp"
9dcc4e193SKrzysztof Grobelny #include "types/trigger_types.hpp"
1076833cb5SWludzik, Jozef 
111477fe6aSWludzik, Jozef #include <boost/asio/spawn.hpp>
12d960e1f3SWludzik, Jozef #include <sdbusplus/message/types.hpp>
131477fe6aSWludzik, Jozef 
1476833cb5SWludzik, Jozef #include <memory>
1576833cb5SWludzik, Jozef #include <utility>
1676833cb5SWludzik, Jozef 
1776833cb5SWludzik, Jozef namespace interfaces
1876833cb5SWludzik, Jozef {
1976833cb5SWludzik, Jozef 
2076833cb5SWludzik, Jozef class TriggerFactory
2176833cb5SWludzik, Jozef {
2276833cb5SWludzik, Jozef   public:
2376833cb5SWludzik, Jozef     virtual ~TriggerFactory() = default;
2476833cb5SWludzik, Jozef 
2576833cb5SWludzik, Jozef     virtual std::unique_ptr<interfaces::Trigger> make(
26e28aa53dSSzymon Dompke         const std::string& id, const std::string& name,
27e28aa53dSSzymon Dompke         const std::vector<std::string>& triggerActions,
28b8cc78ddSKrzysztof Grobelny         const std::vector<std::string>& reportIds,
29a4e67616SCezary Zwolak         interfaces::TriggerManager& triggerManager,
304416fce6SCezary Zwolak         interfaces::JsonStorage& triggerStorage,
314416fce6SCezary Zwolak         const LabeledTriggerThresholdParams& labeledThresholdParams,
324416fce6SCezary Zwolak         const std::vector<LabeledSensorInfo>& labeledSensorsInfo) const = 0;
334416fce6SCezary Zwolak 
344416fce6SCezary Zwolak     virtual std::vector<LabeledSensorInfo>
354416fce6SCezary Zwolak         getLabeledSensorsInfo(boost::asio::yield_context& yield,
364416fce6SCezary Zwolak                               const SensorsInfo& sensorsInfo) const = 0;
3794f71c51SSzymon Dompke 
3894f71c51SSzymon Dompke     virtual std::vector<LabeledSensorInfo>
3994f71c51SSzymon Dompke         getLabeledSensorsInfo(const SensorsInfo& sensorsInfo) const = 0;
4094f71c51SSzymon Dompke 
4194f71c51SSzymon Dompke     virtual void updateThresholds(
4294f71c51SSzymon Dompke         std::vector<std::shared_ptr<interfaces::Threshold>>& currentThresholds,
43*b7b7e1b6SSzymon Dompke         const std::string& triggerId,
4494f71c51SSzymon Dompke         const std::vector<::TriggerAction>& triggerActions,
4594f71c51SSzymon Dompke         const std::shared_ptr<std::vector<std::string>>& reportIds,
4694f71c51SSzymon Dompke         const Sensors& sensors,
4794f71c51SSzymon Dompke         const LabeledTriggerThresholdParams& newParams) const = 0;
4894f71c51SSzymon Dompke 
4994f71c51SSzymon Dompke     virtual void updateSensors(
5094f71c51SSzymon Dompke         Sensors& currentSensors,
5194f71c51SSzymon Dompke         const std::vector<LabeledSensorInfo>& labeledSensorsInfo) const = 0;
5276833cb5SWludzik, Jozef };
5376833cb5SWludzik, Jozef 
5476833cb5SWludzik, Jozef } // namespace interfaces
55