#ifndef THIRD_PARTY_MILOTIC_EXTERNAL_CC_TLBMC_SENSORS_FAN_PWM_H_
#define THIRD_PARTY_MILOTIC_EXTERNAL_CC_TLBMC_SENSORS_FAN_PWM_H_

#include <cstddef>
#include <memory>
#include <optional>
#include <string>
#include <vector>

#include "absl/base/thread_annotations.h"
#include "absl/status/status.h"
#include "absl/status/statusor.h"
#include "absl/synchronization/mutex.h"
#include "boost/asio.hpp"  //NOLINT: boost::asio is commonly used in BMC
#include "boost/circular_buffer.hpp"  //NOLINT: boost is commonly used in BMC
#include "entity_common_config.pb.h"
#include "fan_pwm_config.pb.h"
#include "hal_common_config.pb.h"
#include "reading_range_config.pb.h"
#include "threshold_config.pb.h"
#include "tlbmc/hal/sysfs/hwmon.h"
#include "sensor.pb.h"
#include "tlbmc/sensors/fan_controller.h"
#include "tlbmc/sensors/ixc_hwmon_based_sensor.h"
#include "tlbmc/sensors/sensor.h"

namespace milotic_tlbmc {

class FanPwm : public IXcHwmonBasedSensor {
 private:
  class Token;

 public:
  // Enables the PWM if not already enabled and returns a sensor that can be
  // used to read the PWM from the device.
  // Note:
  // 1. The `io_context` must run only on a single thread.
  static absl::StatusOr<std::shared_ptr<Sensor>> Create(
      const FanPwmConfig& config, const FanController& fan_controller,
      const std::shared_ptr<boost::asio::io_context>& io_context,
      const HwmonSysfs& hwmon_sysfs,
      std::optional<NotificationCb> on_batch_notify = std::nullopt);

  static absl::Status EnablePwm(const boost::filesystem::path& pwm_enable_path);

  FanPwm(Token token, FanPwmType sensor_type, const std::string& input_dev_path,
         const HalCommonConfig& hal_common_config,
         const SensorInstanceProperties& sensor_instance_properties,
         const EntityCommonConfig& entity_common_config,
         const std::shared_ptr<boost::asio::io_context>& io_context,
         std::optional<NotificationCb> on_batch_notify,
         const HwmonSysfs& hwmon_sysfs);

  ~FanPwm() override = default;

  void HandleRefreshResult(const boost::system::error_code& error,
                           size_t bytes_read) override
      ABSL_LOCKS_EXCLUDED(sensor_data_mutex_);

  absl::Status WriteReading(const SensorValue& value) override;

 protected:
  FanPwm() = default;

 private:
  class Token {
   private:
    explicit Token() = default;
    friend FanPwm;
  };

  const FanPwmType sensor_type_ = PWM_SENSOR_TYPE_UNKNOWN;
};

}  // namespace milotic_tlbmc

#endif  // THIRD_PARTY_MILOTIC_EXTERNAL_CC_TLBMC_SENSORS_FAN_PWM_H_
