//Librairies nécessaires au serveur TCP
#include <WiFi.h>
#include <AsyncTCP.h>
#include <vector>
#include "config.h"


//Librairies et paramètres de base nécessaires à l'écran
#include <TFT_eSPI.h>
#include <SPI.h>
#include "esp_adc_cal.h"

#ifndef TFT_DISPOFF
  #define TFT_DISPOFF 0x28
#endif

#ifndef TFT_SLPIN
  #define TFT_SLPIN   0x10
#endif

#define TFT_MOSI  19
#define TFT_SCLK  18
#define TFT_CS     5
#define TFT_DC    16
#define TFT_RST   23
#define TFT_BL     4  // Display backlight control pin

TFT_eSPI tft = TFT_eSPI(135, 240); // Invoke custom library


//Initialisation
void setup()
{
  //Initialisation connexion série (pour les logs)
  Serial.begin(115200);
  Serial.println("\n\nHello World");
  
  //Initilisation écran
  tft_init();

  //Connection WiFi à un routeur
  WiFi.mode(WIFI_STA);
  WiFi.begin(ROUTEUR_SSID, ROUTEUR_PASSWORD);
  if (WiFi.waitForConnectResult() != WL_CONNECTED)
  {
    tft_echec_connexion();
    while(1)
    {
      Serial.println("WiFi Failed");
      delay(1000);
    }
  }
  Serial.printf("Connected to %s, IP %s \n", ROUTEUR_SSID, WiFi.localIP().toString().c_str());
  tft_show_ip(WiFi.localIP());

  //Lancement du serveur
	AsyncServer* server = new AsyncServer(SERVER_HOST_PORT); //Connection WiFi à un routeur
	server->onClient(&handleNewClient, server);              //Activation de l'évènement "Un nouveau client se connecte"
	server->begin();                                         //Lancement du serveur
}


//Loop vide
void loop() {}
