#pragma once

#include "interfaces/report_manager.hpp"
#include "interfaces/sensor.hpp"
#include "interfaces/trigger_factory.hpp"
#include "sensor_cache.hpp"

#include <sdbusplus/asio/object_server.hpp>

class TriggerFactory : public interfaces::TriggerFactory
{
  public:
    TriggerFactory(std::shared_ptr<sdbusplus::asio::connection> bus,
                   std::shared_ptr<sdbusplus::asio::object_server> objServer,
                   SensorCache& sensorCache,
                   interfaces::ReportManager& reportManager);

    std::unique_ptr<interfaces::Trigger> make(
        boost::asio::yield_context& yield, const std::string& name,
        bool isDiscrete, bool logToJournal, bool logToRedfish,
        bool updateReport,
        const std::vector<
            std::pair<sdbusplus::message::object_path, std::string>>& sensors,
        const std::vector<std::string>& reportNames,
        const TriggerThresholdParams& thresholdParams,
        interfaces::TriggerManager& triggerManager,
        interfaces::JsonStorage& triggerStorage) const override;

  private:
    std::shared_ptr<sdbusplus::asio::connection> bus;
    std::shared_ptr<sdbusplus::asio::object_server> objServer;
    SensorCache& sensorCache;
    interfaces::ReportManager& reportManager;

    std::pair<std::vector<std::shared_ptr<interfaces::Sensor>>,
              std::vector<std::string>>
        getSensors(boost::asio::yield_context& yield,
                   const std::vector<
                       std::pair<sdbusplus::message::object_path, std::string>>&
                       sensorPaths) const;
};
