#include <WiFi.h>
#include <HTTPClient.h>

const char* ssid = "Wokwi-GUEST";
const char* password = "";

const char* RMSServer = "sashiraz.info";
//توکن های مربوط به گیت 
const char* gateaccessTokens[] = {
  "jkhdsfjhskdjf11", 
  "jkhdsfjhskdjf10",
  "jkhdsfjhskdjf9",
  "jkhdsfjhskdjf8",
  "jkhdsfjhskdjf7",
  "jkhdsfjhskdjf6",
  "jkhdsfjhskdjf5",
  "jkhdsfjhskdjf4",
  "jkhdsfjhskdjf3",
  "jkhdsfjhskdjf2",
  "lkdfjhjkljdsflj1"
};
const int numgateAccessTokens = sizeof(gateaccessTokens) / sizeof(gateaccessTokens[0]);

//توکن های مربوط به Baggage  
const char* bagaccessTokens[] = {
  "7C38yJ7EgRdjJ1qqhCfB", 
  "5kNZyQhr4SwSjvEs5KS5",
  "nQMa6vMUJriVF3zVsEbH",
  "7sBcez0S6J5j6EBHGteL",
  "gKkdrAygjwsLcxCmkknv",
  "xTteIUB7emN25YV60cd4",
  "el86mJGka1dTzjQAlVH1",
  "wkpYOsPBENlgLhXp4gzy",
  "GRKvjNGRjrhV3yhW6T1l",
  "c3ODmzeFpNI88fiyqwMc"
};
const int numbagAccessTokens = sizeof(bagaccessTokens) / sizeof(bagaccessTokens[0]);

String generateRandomStatus() {
  return random(2) ? "Active" : "Not Active";
}

String generateRandomOperational() {
  return random(2) ? "ok" : "notOperational";
}

String generateRandomAlarm() {
  int randomNumber = random(6);
  if (randomNumber == 0) {
    return 1;
  } else if (randomNumber == 1) {
    return 10;
  } else if (randomNumber == 2) {
    return 20;
  } else if (randomNumber == 3) {
    return 30;
  } else if (randomNumber == 4) {
    return 40;
  } else {
    return 50;
  }
}

void setup() {
  Serial.begin(115200);

  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi...");
  }
  Serial.println("Connected to WiFi");

  randomSeed(analogRead(0));
}

void loop() {
  //ارسال دیتا رندم برای گیت ها
  for (int i = 0; i < numgateAccessTokens; i++) {
    String status = generateRandomStatus();
    String operational = generateRandomOperational();
    String alarm = generateRandomAlarm();

    WiFiClient client;
    HTTPClient http;

    String url = "https://"+ String(RMSServer) + "/api/v1/" + String(gateaccessTokens[i]) + "/telemetry";

    String payload = "{ \"Alarm\":" + alarm + ", \"Status\":" + status + ", \"operational\":" + operational + "}";

    http.begin(url);
    http.addHeader("Content-Type", "application/json");

    int httpResponseCode = http.POST(payload);

    if (httpResponseCode > 0) {
      Serial.print("Data sent successfully to Gate. Response code: ");
      Serial.println(httpResponseCode);
      Serial.print("accessToken: ");
      Serial.println(String(gateaccessTokens[i]));
      Serial.print("status: " + status );
      Serial.print("   operational: " + operational);
      Serial.println("   Alarm: " + alarm);

    } else {
      Serial.print("Error sending data to RMS. Error code: ");
      Serial.println(httpResponseCode);
    }

      http.end();
    
  
     //ارسال دیتای رندم برای Baggage
 
    
     url = "https://"+ String(RMSServer) + "/api/v1/" + String(bagaccessTokens[i]) + "/telemetry";

     payload = "{ \"Alarm\":" + alarm + ", \"Status\":" + status + ", \"operational\":" + operational + "}";

    http.begin(url);
    http.addHeader("Content-Type", "application/json");

     httpResponseCode = http.POST(payload);

    if (httpResponseCode > 0) {
      Serial.print("Data sent successfully to Baggage. Response code: ");
      Serial.println(httpResponseCode);
      Serial.print("accessToken: ");
      Serial.println(String(bagaccessTokens[i]));
      Serial.print("status: " + status );
      Serial.print("   operational: " + operational);
      Serial.println("   Alarm: " + alarm);

    } else {
      Serial.print("Error sending data to RMS. Error code: ");
      Serial.println(httpResponseCode);
    }

    http.end();
    
  }

}