#include "touch.h"
#include "constants.h"
#include <EEPROM.h>

void doTouchEvent(uint16_t x, uint16_t y) {
  if (seek) radio.setUnMute();
  seek = false;
  if (scandxmode) {
    ShowFreq(5);
    ShowFreq(0);
  } else {
    if (menu) {
      if (x > 0 && x < 320 && y > 0 && y < 33) {
        ModeButtonPress();
        return;
      }
      if (menuopen) {
        if (x > 18 && x < 78 && y > 150 && y < 190) KeyDown();
        if (x > 240 && x < 300 && y > 150 && y < 190) KeyUp();
        if ((x > 240 && x < 300 && y > 40 && y < 80) || (x > 130 && x < 190 && y > 150 && y < 190)) {
          touchrepeat = false;
          ButtonPress();
        }
        return;
      } else {
        if (x > 8 && x < 158) {
          if (y > 38 && y < 70) {
            if (items[menupage] > 0) {
              menuitem = 0;
              menuoption = ITEM1;
              DoMenu();
            }
          } else if (y > 78 && y < 110) {
            if (items[menupage] > 1) {
              menuitem = 1;
              menuoption = ITEM2;
              DoMenu();
            }
          } else if (y > 118 && y < 150) {
            if (items[menupage] > 2) {
              menuitem = 2;
              menuoption = ITEM3;
              DoMenu();
            }
          } else if (y > 158 && y < 190) {
            if (items[menupage] > 3) {
              menuitem = 3;
              menuoption = ITEM4;
              DoMenu();
            }
          } else if (y > 198 && y < 230) {
            if (items[menupage] > 4) {
              menuitem = 4;
              menuoption = ITEM5;
              DoMenu();
            }
          }
        } else if (x > 163 && x < 313) {
          if (y > 38 && y < 70) {
            if (items[menupage] > 5) {
              menuitem = 5;
              menuoption = ITEM6;
              DoMenu();
            }
          } else if (y > 78 && y < 110) {
            if (items[menupage] > 6) {
              menuitem = 6;
              menuoption = ITEM7;
              DoMenu();
            }
          } else if (y > 118 && y < 150) {
            if (items[menupage] > 7) {
              menuitem = 7;
              menuoption = ITEM8;
              DoMenu();
            }
          } else if (y > 158 && y < 190) {
            if (items[menupage] > 8) {
              menuitem = 8;
              menuoption = ITEM9;
              DoMenu();
            }
          } else if (y > 198 && y < 230) {
            if (items[menupage] > 9) {
              menuitem = 9;
              menuoption = ITEM10;
              DoMenu();
            }
          }
        }
        touchrepeat = true;
        return;
      }
    }

    if (!menu && !BWtune) {
      if (x > 30 && x < 65 && y > 0 && y < 30 && band < BAND_GAP) {
        doStereoToggle();
        return;
      } else if (x > 155 && x < 250 && y > 0 && y < 30) {
        BuildBWSelector();
        BWtune = true;
        return;
      }
    }

    if (BWtune) {
      if (y > 35 && y < 65) {
        if (x > 7 && x < 77) BWtemp = 1;
        if (x > 87 && x < 157) BWtemp = 2;
        if (x > 167 && x < 237) BWtemp = 3;
        if (x > 247 && x < 317) BWtemp = 4;
      }
      if (band < BAND_GAP) {
        if (y > 75 && y < 105) {
          if (x > 7 && x < 77) BWtemp = 5;
          if (x > 87 && x < 157) BWtemp = 6;
          if (x > 167 && x < 237) BWtemp = 7;
          if (x > 247 && x < 317) BWtemp = 8;
        }

        if (y > 115 && y < 145) {
          if (x > 7 && x < 77) BWtemp = 9;
          if (x > 87 && x < 157) BWtemp = 10;
          if (x > 167 && x < 237) BWtemp = 11;
          if (x > 247 && x < 317) BWtemp = 12;
        }

        if (y > 155 && y < 185) {
          if (x > 7 && x < 77) BWtemp = 13;
          if (x > 87 && x < 157) BWtemp = 14;
          if (x > 167 && x < 237) BWtemp = 15;
          if (x > 247 && x < 317) BWtemp = 16;
        }

        if (y > 195 && y < 225) {
          if (x > 7 && x < 77) BWtemp = 0;
          if (x > 87 && x < 157) iMSset = !iMSset;
          if (x > 167 && x < 237) EQset = !EQset;
          if (x > 87 && x < 237) {
            if (!iMSset && !EQset) iMSEQ = 0;
            if (iMSset && EQset) iMSEQ = 2;
            if (!iMSset && EQset) iMSEQ = 3;
            if (iMSset && !EQset) iMSEQ = 4;
            EEPROM.writeByte(EE_BYTE_IMSSET, iMSset);
            EEPROM.writeByte(EE_BYTE_EQSET, EQset);
            EEPROM.commit();
            updateiMS();
            updateEQ();
            if (XDRGTKUSB || XDRGTKTCP) DataPrint("G" + String(!EQset) + String(!iMSset) + "\n");
          }
        }
      }

      if (y > 195 && y < 225 && x > 247 && x < 317) {
        leave = true;
        bwtouchtune = true;
        BWset = BWtemp;
        doBW();
        BWtune = false;
        bwtouchtune = false;
        if (advancedRDS) {
          BuildAdvancedRDS();
        } else if (afscreen) {
          BuildAFScreen();
        } else {
          BuildDisplay();
          SelectBand();
        }
      } else {
        bwtouchtune = true;
        BWset = BWtemp;
        showBWSelector();
        doBW();
        bwtouchtune = false;
      }
      return;
    }

    if (!BWtune && !menu && !advancedRDS && !seek && !afscreen) {        
      if (x > 0 && x < 320 && y > 180 && y < 240 && band < BAND_GAP) {  
        leave = true;
        BuildAdvancedRDS();                                             
        return;
      } else if (x > 60 && x < 240 && y > 40 && y < 100) {
        doBandToggle();                                               
        return;
      } else if (x > 0 && x < 30 && y > 25 && y < 90) {
        doTuneMode();                                                  
        return;
      } else if (x > 250 && x < 320 && y > 50 && y < 80) {
        toggleiMSEQ();                                             
      }
    }

    if (!BWtune && !menu && advancedRDS && !seek && !afscreen) {        
      if (x > 0 && x < 320 && y > 120 && y < 170) {                        
        leave = true;
        BuildDisplay();                                        
        SelectBand();
        return;
      } else if (x > 0 && x < 320 && y > 180 && y < 240) {
        BuildAFScreen();
        return;
      }
    }

    if (!BWtune && !menu && !advancedRDS && !seek && afscreen) {
      if (x > 0 && x < 320 && y > 100 && y < 170) {
        if (afpagenr == 1) afpagenr = 2; else if (afpagenr == 2 && afpage) afpagenr = 3; else afpagenr = 1;
        BuildAFScreen();
        return;
      }
      if (x > 0 && x < 320 && y > 180 && y < 240) {
        leave = true;
        BuildAdvancedRDS();
        return;
      }
    }
  }
}