#include "HUB238.hpp"
#include "OperatingModes.h"
#if POW_PD_EXT == 1
#ifdef HAS_POWER_DEBUG_MENU
void showPDDebug(void) {
  // Print out the USB-PD state
  // Basically this is like the Debug menu, but instead we want to print out the PD status
  uint8_t     screen = 0;
  ButtonState b;
  for (;;) {
    OLED::clearScreen();                               // Ensure the buffer starts clean
    OLED::setCursor(0, 0);                             // Position the cursor at the 0,0 (top left)
    OLED::print(SmallSymbolPDDebug, FontStyle::SMALL); // Print Title
    OLED::setCursor(0, 8);                             // second line
    if (screen > 6) {
      screen = 0;
    }
    if (screen == 0) {
      // Print the PD Debug state
      OLED::print(SmallSymbolState, FontStyle::SMALL);
      OLED::print(SmallSymbolSpace, FontStyle::SMALL);
      uint16_t temp = hub238_debug_state();
      OLED::drawHex(temp, FontStyle::SMALL, 4);
      OLED::print(SmallSymbolSpace, FontStyle::SMALL);
      // Print current selected specs
      temp = hub238_source_voltage();
      OLED::printNumber(temp, 2, FontStyle::SMALL, true);
      OLED::print(SmallSymbolSpace, FontStyle::SMALL);

    } else {

      // Print out the Proposed power options one by one
      const uint8_t voltages[]  = {5, 9, 12, 15, 18, 20};
      uint16_t      voltage     = voltages[screen - 1];
      uint16_t      currentx100 = hub238_getVoltagePDOCurrent(voltage);
      OLED::printNumber(voltage, 2, FontStyle::SMALL, true);
      OLED::print(SmallSymbolSpace, FontStyle::SMALL);

      OLED::printNumber(currentx100 / 100, 1, FontStyle::SMALL, true);
      OLED::print(SmallSymbolDot, FontStyle::SMALL);
      OLED::printNumber(currentx100 % 100, 2, FontStyle::SMALL, true);
    }

    OLED::refresh();
    b = getButtonState();
    if (b == BUTTON_B_SHORT) {
      return;
    } else if (b == BUTTON_F_SHORT) {
      screen++;
    }

    GUIDelay();
  }
}
#endif
#endif
