#include "resistance_sensor.h"
#include "esphome/core/log.h"

namespace esphome {
namespace resistance {

static const char *const TAG = "resistance";

void ResistanceSensor::dump_config() {
  LOG_SENSOR("", "Resistance Sensor", this);
  ESP_LOGCONFIG(TAG,
                "  Configuration: %s\n"
                "  Resistor: %.2fΩ\n"
                "  Reference Voltage: %.1fV",
                this->configuration_ == UPSTREAM ? "UPSTREAM" : "DOWNSTREAM", this->resistor_,
                this->reference_voltage_);
}
void ResistanceSensor::process_(float value) {
  if (std::isnan(value)) {
    this->publish_state(NAN);
    return;
  }
  float res = 0;
  switch (this->configuration_) {
    case UPSTREAM:
      if (value == 0.0f) {
        res = NAN;
      } else {
        res = (this->reference_voltage_ - value) / value;
      }
      break;
    case DOWNSTREAM:
      if (value == this->reference_voltage_) {
        res = NAN;
      } else {
        res = value / (this->reference_voltage_ - value);
      }
      break;
  }

  res *= this->resistor_;
  ESP_LOGV(TAG, "'%s' - Resistance %.1fΩ", this->name_.c_str(), res);
  this->publish_state(res);
}

}  // namespace resistance
}  // namespace esphome
