#include "Free_Fonts.h" 
#include <TFT_eSPI.h>
#include <SPI.h>       // this is needed for display
#include "tft_menu.h"
#include "zz_icons.h"
// The display also uses hardware SPI, plus #9 & #10
#define TFT_CS 15
#define TFT_DC 2
#define TFT_MOSI 23
#define TFT_SCLK 18
float dispTemp = 22.3;
TFT_eSPI tft = TFT_eSPI(); // Invoke custom library with default width and height
ItemMenu MainMenu(&tft);
EditMenu OptionMenu(&tft);
EditMenu ColorMenu(&tft, false);
EditMenu WirelessMenu(&tft);
#define MENU_TEXT              TFT_GREEN
#define MENU_BACKGROUND        TFT_WHITE
#define MENU_HIGHLIGHTTEXT     TFT_CYAN
#define MENU_HIGHLIGHT         TFT_GREEN
#define MENU_SELECTTEXT        TFT_YELLOW
// variables
int MenuOption1 = 0,
    MenuOption2 = 0,
    MenuOption3 = 0,
     MenuOption4 = 0,
      MenuOption5 = 0,
       MenuOption6 = 0,
    bone = 78;
void ksm(int start_x,int start_y,int tiltAngle,int len,int * xee, int * yee) {
float tiltAngleRad = tiltAngle * DEG_TO_RAD; // convert angle to radians
int end_x = start_x + (len * sin (tiltAngleRad)); // Ending x-coordinate offset & radius
int end_y = start_y - (len * cos (tiltAngleRad)); // Ending y-coordinate offset & radius
*xee = end_x;
*yee = end_y;
 tft.drawLine(start_x ,start_y,end_x,end_y,TFT_WHITE);
 //tft.drawLine(start_x+1 ,start_y+1,end_x,end_y,TFT_WHITE);
}
void setup(void) {
  tft.begin();
  tft.setRotation(1);
  
  int start_x = 5;
  int start_y = 20;
  int width_ = tft.width() - (2*start_x) ;
  int height_ = 100;
  int radius_ = 5;
  uint16_t rect_color = TFT_RED;
  int rect_thickness = 3;
   // print VIN
    tft.setTextSize(2);
    tft.setTextColor(TFT_WHITE);
    tft.setCursor( 2, 2);
    tft.println("Vin: --");
  
    draw_rect(start_x,start_y,width_,height_,radius_,rect_color,rect_thickness);
    
    // print RPM label
    tft.setTextSize(2);
    tft.setTextColor(TFT_WHITE);
    tft.setCursor( tft.width()-90, start_y+(height_/2)-40);
    tft.println("Engine");
    // print RPM UNIT
    tft.setTextSize(3);
    tft.setTextColor(TFT_WHITE);
    tft.setCursor( tft.width()-90, start_y+(height_/2)+20);
    tft.println("RPM");
    // print RPM value
    tft.setTextSize(6);
    tft.setTextColor(TFT_WHITE,TFT_BLACK);
    tft.setCursor( (tft.width()/2)-30, start_y+(height_/2)-20);
    tft.println(" 0 ");
  int vertical_gap = 20+height_;
  draw_rect(start_x,start_y+vertical_gap,width_,height_,radius_,rect_color,rect_thickness);
  
      // print speed label
    tft.setTextSize(2);
    tft.setTextColor(TFT_WHITE);
    tft.setCursor( tft.width()-90, start_y+vertical_gap+(height_/2)-40);
    tft.println("Speed");
    // print speedUNIT
    tft.setTextSize(3);
    tft.setTextColor(TFT_WHITE);
    tft.setCursor( tft.width()-90, start_y+vertical_gap+(height_/2)+20);
    tft.println("Km/H");
    // print speed value
    tft.setTextSize(6);
    tft.setTextColor(TFT_WHITE,TFT_BLACK);
    tft.setCursor( (tft.width()/2)-30, start_y+vertical_gap+(height_/2)-20);
    tft.println(" 0 ");
  return;
 
  
}
void draw_rect(int xx, int yy, int ww, int hh, int rad, uint16_t color, int thick) {
int startee = 0;
  for ( byte x = 0; x < thick; x++ ) {
     tft.drawRoundRect(xx+startee,yy+startee,ww-(2*startee),hh-(2*startee),rad,TFT_RED);
     startee++;
  }
}
void loop() {
 
}
void themeClockTFT(float value, const String& lable, const String& units, const String& valueSample, const String& valueType, unsigned int accuracy) {
  int xpos = 10;
  int ypos = 45;
  int yPad = 0;
  int padding = tft.textWidth(String(value, accuracy), FONT8);
  tft.setTextDatum(TL_DATUM);
  tft.drawString(lable, xpos, ypos, FONT4);
  tft.setTextDatum(TR_DATUM);
  tft.drawString(units, 240 - xpos, ypos, FONT4);
  tft.setTextDatum(TL_DATUM);
  tft.setTextPadding(padding);
  ypos += tft.fontHeight(FONT8) / 2 + yPad;
  tft.drawFloat(value, accuracy, (240 - padding) / 2, ypos, FONT8);
  tft.setTextPadding(0);
}