#pragma once

#include "esphome/core/component.h"
#include "esphome/core/defines.h"
#include "esphome/core/preferences.h"

#ifdef USE_BSEC2

#include "esphome/components/bme68x_bsec2/bme68x_bsec2.h"
#include "esphome/components/i2c/i2c.h"

namespace esphome::bme68x_bsec2_i2c {

class BME68xBSEC2I2CComponent final : public bme68x_bsec2::BME68xBSEC2Component, public i2c::I2CDevice {
  void setup() override;
  void dump_config() override;

  uint32_t get_hash() override;

  static int8_t read_bytes_wrapper(uint8_t a_register, uint8_t *data, uint32_t len, void *intfPtr);
  static int8_t write_bytes_wrapper(uint8_t a_register, const uint8_t *data, uint32_t len, void *intfPtr);
  static void delay_us(uint32_t period, void *intfPtr);
};

}  // namespace esphome::bme68x_bsec2_i2c
#endif
