#include "daisysp.h"
#include "daisy_patch.h"

#include <string>

#include "main.h"

using namespace daisy;
using namespace daisysp;

DaisyPatch patch;

const int MENU_SIZE = 7;
std::string menuItems[MENU_SIZE];
int selectedMenuItem = 0;

void SetupMenu() {
  menuItems[0] = "VCO";
  menuItems[1] = "VCA";
  menuItems[2] = "Envelope";
  menuItems[3] = "LFO";
  menuItems[4] = "Logic";
  menuItems[5] = "Delay";
  menuItems[6] = "Reverb";
}

int main(void) {
  patch.Init();
  patch.StartAdc();
  SetupMenu();
  while(true) {
    ProcessControls();
    ProcessOled();
    ProcessOutputs();
  }
}

void FilterMenu() {
  if (selectedMenuItem >= MENU_SIZE) {
    selectedMenuItem = 0;
  } else if (selectedMenuItem < 0) {
    selectedMenuItem = MENU_SIZE - 1;
  }
}

void ProcessControls() {
  patch.UpdateAnalogControls();
  patch.DebounceControls();
  selectedMenuItem += patch.encoder.Increment();
  FilterMenu();
}

void ProcessOutputs() {}

void ProcessOled() {
  patch.display.Fill(false);

  std::string str;
  char* cstr = &str[0];
  patch.display.SetCursor(0,0);
  str = std::to_string(selectedMenuItem) + " " + menuItems[selectedMenuItem];
  patch.display.WriteString(cstr, Font_7x10, true);

  patch.display.Update();
}