#include "gui/common/NamedField.hpp"
#include <gui/debugview_screen/DebugViewView.hpp>

DebugViewView::DebugViewView() {}

void DebugViewView::setupScreen() {
  DebugViewViewBase::setupScreen();
  size_t numItems = DataFieldType_COUNT / 2;
  if (DataFieldType_COUNT % 2 == 1) {
    numItems++;
  }
  list.setNumberOfItems(numItems);
}

void DebugViewView::tearDownScreen() { DebugViewViewBase::tearDownScreen(); }

void DebugViewView::listUpdateItem(DebugViewLine &line, int16_t itemIndex) {
  size_t idx = itemIndex * 2;
  line.setFieldType(0, static_cast<DataFieldType>(idx));
  idx++;
  if (idx < DataFieldType_COUNT) {
    line.setFieldType(1, static_cast<DataFieldType>(idx));
    line.setFieldVisible(1, true);
  } else {
    line.setFieldVisible(1, false);
  }
  line.setLightBG(itemIndex % 2 == 1);
}

void DebugViewView::updateFieldValues() {
  for (DebugViewLine &el : listListItems.element) {
    el.updateFieldValues();
  }
}

void DebugViewView::scrollUp() {
  if (scrollIndex == 0) {
    updateScrollIndex(list.getNumberOfItems() - 1);
  } else {
    updateScrollIndex(scrollIndex - 1);
  }
}

void DebugViewView::scrollDown() {
  updateScrollIndex((scrollIndex + 1) % list.getNumberOfItems());
}

void DebugViewView::updateScrollIndex(size_t index) {
  scrollIndex = index;
  if (scrollIndex == 0) {
    // Just animating to 0 looks very broken when scrolling forwards. Animating
    // to numItems looks good in both directions.
    list.animateToItem(list.getNumberOfItems(), 2);
  } else {
    list.animateToItem(scrollIndex, 2);
  }
}