#include <BLEDevice.h>
#include <BLEServer.h>
#include <BLEUtils.h>
#include <BLE2902.h>

#define SERVICE_UUID "7cddf5af-453f-40fa-808e-37ae6ad8facd"
BLECharacteristic temphumidSense (BLEUUID("3383a686-a53c-42e4-a88c-e0e1de4c4bda"), BLECharacteristic::PROPERTY_READ
| BLECharacteristic::PROPERTY_NOTIFY
| BLECharacteristic::PROPERTY_INDICATE);
BLEDescriptor temphumidDescriptor(BLEUUID((uint16_t)0x2901));

bool clientConnected = false;


class MyServerCallbacks: public BLEServerCallbacks {
  void onConnect (BLEServer * pServer) {
    clientConnected = true;
  };
  void onDisconnect (BLEServer * pServer) {
    clientConnected = false; 
  }
};

void setup () {
  Serial.begin(115200);
  BLEDevice::init("esp32-Server");
  BLEServer *pServer = BLEDevice::createServer();
  pServer->setCallbacks(new MyServerCallbacks());
  
  BLEService *pSensor = pServer-> createService(SERVICE_UUID);
  
  pSensor-> addCharacteristic(&temphumidSense);
  temphumidDescriptor.setValue("In Degree Celcius");
  temphumidSense.addDescriptor(&temphumidDescriptor);
  temphumidSense.addDescriptor(new BLE2902());
  
  pServer->getAdvertising()->addServiceUUID(SERVICE_UUID);
  pSensor-> start(); // Start the service
  pServer-> getAdvertising()->start ();// Starts the discovery of ESP32
  
  Serial.println("Waiting for a client to connect ...");
}

void loop () {
  if (clientConnected) {
    temphumidSense.setValue("1234");
    temphumidSense.notify();  // Send the Temperature reading to the application!
    Serial.println("Sent string");
  }
  else {
    Serial.println("Not connected");
  }
  delay(2000);
}
