#include "Dezibot.h"

Dezibot dezibot = Dezibot();
long randomDurationMs = 0;

void setup() {
  // put your setup code here, to run once:
  dezibot.begin();
  Serial.begin(115200);
  // init RNG
  int seed = analogRead(GPIO_NUM_42);
  randomSeed(seed);
  Serial.printf("Initialized PRNG with seed %d", seed);
}

void loop() {
  randomDurationMs = random(0, 100);
  uint32_t color = random(0, 0xFFFFFF);
  Serial.printf("Estimated current and charge consumption of turning an RGB "
                "LED on at color 0x%06X for %d ms: %f mA, %f C\n",
                color, randomDurationMs,
                dezibot.multiColorLight.modelCurrentConsumption(color),
                dezibot.multiColorLight.modelChargeConsumption(
                    TOP_LEFT, color, randomDurationMs));
  randomDurationMs = random(0, 100);
  uint32_t randomDuty = random(0, 1 << LEDC_TIMER_10_BIT);
  Serial.printf(
      "Estimated current and charge consumption of turning front IR LED on at %d duty for "
      "%d ms: %f mA, %f C\n",
      randomDuty,
      randomDurationMs,
      dezibot.infraredLight.front.modelCurrentConsumption(randomDuty),
      dezibot.infraredLight.front.modelChargeConsumptionOn(randomDurationMs));
  Serial.printf(
      "Estimated current and charge consumption of turning bottom IR LED on at %d duty for "
      "%d ms: %f mA, %f C\n",
      randomDuty,
      randomDurationMs,
      dezibot.infraredLight.bottom.modelCurrentConsumption(randomDuty),
      dezibot.infraredLight.bottom.modelChargeConsumptionOn(randomDurationMs));
  randomDurationMs = random(0, 100);
  Serial.printf(
      "Estimated current and charge consumption of running motor at default "
      "duty cycle for "
      "%d ms: %f mA, %f C\n",
      randomDurationMs, dezibot.motion.left.modelCurrentConsumption(3900),
      dezibot.motion.left.modelChargeConsumption(3900, randomDurationMs));
  delay(10000);
}