<?php
//THIS IS LIVE.SOLUTION4CARE.EU
include './assets/layouts/header.php';

require('Medoo.php');
use \Medoo\Medoo;

if(check_logged_in()) {
  $database = new \Medoo\Medoo([
    // [required]
    'type' => 'mysql',
    'host' => 'localhost',
    'database' => 'gpsTest',
    'username' => 'gpsTest',
    'password' => '6HNV*=?U',

    // [optional]
    'charset' => 'utf8mb4',
    'collation' => 'utf8mb4_general_ci',
    'port' => 3306,

    // [optional] The table prefix. All table names will be prefixed as PREFIX_table.
  //	'prefix' => 'PREFIX_',

    // [optional] To enable logging. It is disabled by default for better performance.
    //'logging' => true,

    // [optional]
    // Error mode
    // Error handling strategies when the error has occurred.
    // PDO::ERRMODE_SILENT (default) | PDO::ERRMODE_WARNING | PDO::ERRMODE_EXCEPTION
    // Read more from https://www.php.net/manual/en/pdo.error-handling.php.
    'error' => PDO::ERRMODE_SILENT,

    // [optional]
    // The driver_option for connection.
    // Read more from http://www.php.net/manual/en/pdo.setattribute.php.

    'option' => [
      PDO::ATTR_CASE => PDO::CASE_NATURAL
    ],

    // [optional] Medoo will execute those commands after the database is connected.
    /*
    'command' => [
      'SET SQL_MODE=ANSI_QUOTES'
    ]
    */
  ]);

  require('smsapi.php');

  $orgId = $_SESSION['organisation_id'];

} else {
  echo "{\"status\":\"error\", \"message\":\"Unauthorized\"}";
  exit();
}


function validateCoordinates($lat, $lng) {
  // Check if latitude and longitude are numeric
  if (!is_numeric($lat) || !is_numeric($lng)) {
      return false;
  }

  // Validate latitude range (-90 to 90)
  if ($lat < -90 || $lat > 90) {
      return false;
  }

  // Validate longitude range (-180 to 180)
  if ($lng < -180 || $lng > 180) {
      return false;
  }

  return true;
}

function clean($str) {

      // Using str_replace() function
      // to replace the word
      $res = str_replace( array( '\'', '"',
      ',' , ';', '<', '>', '{', '}' ), ' ', $str);

      // Returning the result
      return $res;
      }

      function getSimForIccidFromList($AllSimListJson, $iccid) {
        $jsonRows = json_decode($AllSimListJson, true);
        for ($i=0;i<count($jsonRows);$i++) {
          if ($jsonRows[i]['ICCID'] === $iccid) {
            return $jsonRows[i];
          }
        }
        return false;
        //hello
      }
    
      function getSimForMSISDNFromList($AllSimList, $msisdn) {
        //print_r($AllSimList);
        //echo "entering getSimForMSISDNFromList($msisdn)";
        for ($i=0;$i<count($AllSimList);$i++) {
          if ($AllSimList[$i]['MSISDN'] === $msisdn) {
          //echo "WE FOUND IT !!!!!!";
            return $AllSimList[$i];
          }
        }
        //echo "WE DIDNT FIND SIM!";
        return false;
      }

      function getCachedSimList() {
        $cache_file = "cache.json";
        $cache_time = 120; // time in seconds to cache the data
        $current_time = time();
  
        // check if cache file exists and is less than $cache_time seconds old
        if (file_exists($cache_file) && ($current_time - filemtime($cache_file)) < $cache_time) {
            $api_response = json_decode(file_get_contents($cache_file), true);
        } else {
            // Initialize cURL
            $curl = curl_init();
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
  
            $API_NONCE = intval(microtime(true) * 1000);
  
            $API_KEY = "M68MA5VLIQHYX7OD7EJF";
  
            $API_SECRET = "TRI1ULZPWP1KBWYSN0UQ";
  
            //$REQUEST_BODY = '{"iccid": ["423664658624"]}';
            $REQUEST_BODY = '';
  
            $API_SIGNATURE = strtoupper(base64_encode(hash_hmac('sha256', $API_KEY . $REQUEST_BODY . $API_NONCE, $API_SECRET, true)));
            //echo "API_SIGNATURE: ".$API_SIGNATURE."\n\n\n<br><br>";
  
            curl_setopt_array($curl, array(
              CURLOPT_URL => 'https://apiv2.datamobile.ag/getSimList',
              CURLOPT_RETURNTRANSFER => true,
              CURLOPT_ENCODING => '',
              CURLOPT_MAXREDIRS => 10,
              CURLOPT_TIMEOUT => 0,
              CURLOPT_FOLLOWLOCATION => true,
              CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
              CURLOPT_CUSTOMREQUEST => 'POST',
              CURLOPT_POST => 1,
              CURLOPT_SSL_VERIFYPEER => 0,
              CURLOPT_POSTFIELDS => $REQUEST_BODY,
              CURLOPT_HTTPHEADER => array(
                'API-KEY: '.$API_KEY,
                'API-NONCE: '.$API_NONCE,
                'API-SIGNATURE: '.$API_SIGNATURE,
                'Content-Type: application/json',
                'API-ACTION: getSimList',
              ),
            ));
  
            // Get the API response
            $api_response = json_decode(curl_exec($curl), true);
            curl_close($curl);
  
            file_put_contents($cache_file, json_encode($api_response));
        }
  
            if (count($api_response) > 0) {
              return $api_response;
            } else {
              return false;
            }
  
            return $api_response;
  
      }

function getSimByMSISDN($msisdn) {

      $curl = curl_init();
      curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);

      $API_NONCE = intval(microtime(true) * 1000);

$API_KEY = "1T775M4EFGP34ETKO6PG";

$API_SECRET = "QEGF7P1AWOGR6P6FS2B4";

      //$REQUEST_BODY = '{"iccid": ["423664658624"]}';
      $REQUEST_BODY = '';

      $API_SIGNATURE = strtoupper(base64_encode(hash_hmac('sha256', $API_KEY . $REQUEST_BODY . $API_NONCE, $API_SECRET, true)));
//echo "API_SIGNATURE: ".$API_SIGNATURE."<br><br><br>";

      curl_setopt_array($curl, array(
        CURLOPT_URL => 'https://apiv2.datamobile.ag/getSimList',
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_ENCODING => '',
        CURLOPT_MAXREDIRS => 10,
        CURLOPT_TIMEOUT => 0,
        CURLOPT_FOLLOWLOCATION => true,
        CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
        CURLOPT_CUSTOMREQUEST => 'POST',
        CURLOPT_POST => 1,
        CURLOPT_POSTFIELDS => $REQUEST_BODY,
        CURLOPT_HTTPHEADER => array(
          'API-KEY: '.$API_KEY,
          'API-NONCE: '.$API_NONCE,
          'API-SIGNATURE: '.$API_SIGNATURE,
          'Content-Type: application/json',
          'API-ACTION: getSimList',
        ),
      ));

$response = curl_exec($curl);

      curl_close($curl);

$responseAsArray = json_decode($response, true);
//print_r($responseAsArray);
  for ($i=0;$i < count($responseAsArray);$i++) {
    if (isset($responseAsArray[$i]['MSISDN']) AND $responseAsArray[$i]['MSISDN'] === $msisdn) {
      //echo json_encode($responseAsArray[$i]);
      //echo "getSimByMSISDN returning:";
      //print_r($responseAsArray[$i]);
      return $responseAsArray[$i];
    }
  }
        return false;
      }


function getICCIDByMSISDN($msisdn) {

  $curl = curl_init();
  curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);

  $API_NONCE = intval(microtime(true) * 1000);

  $API_KEY = "1T775M4EFGP34ETKO6PG";

  $API_SECRET = "QEGF7P1AWOGR6P6FS2B4";

  //$REQUEST_BODY = '{"iccid": ["423664658624"]}';
  $REQUEST_BODY = '';

  $API_SIGNATURE = strtoupper(base64_encode(hash_hmac('sha256', $API_KEY . $REQUEST_BODY . $API_NONCE, $API_SECRET, true)));
  //echo "API_SIGNATURE: ".$API_SIGNATURE."<br><br><br>";

  curl_setopt_array($curl, array(
    CURLOPT_URL => 'https://apiv2.datamobile.ag/getSimList',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => '',
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 0,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_POST => 1,
    CURLOPT_POSTFIELDS => $REQUEST_BODY,
    CURLOPT_HTTPHEADER => array(
      'API-KEY: '.$API_KEY,
      'API-NONCE: '.$API_NONCE,
      'API-SIGNATURE: '.$API_SIGNATURE,
      'Content-Type: application/json',
      'API-ACTION: getSimList',
    ),
  ));

  $response = curl_exec($curl);

  curl_close($curl);

  $responseAsArray = json_decode($response, true);
  if(is_array($responseAsArray)){
  for ($i=0;$i < count($responseAsArray);$i++) {
    if (isset($responseAsArray[$i]['MSISDN']) AND $responseAsArray[$i]['MSISDN'] === $msisdn) {
      //echo json_encode($responseAsArray[$i]);
          return $responseAsArray[$i]['ICCID'];
        }
    }
  }
  return false;
}


function getSimByIMEI($imei) {

  $data = $GLOBALS['database']->select("devices", "*",
          [ "imei" => $imei]
        );

  if (count($data) >= 0) {

    $curl = curl_init();
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);

    $API_NONCE = intval(microtime(true) * 1000);

    $API_KEY = "1T775M4EFGP34ETKO6PG";

    $API_SECRET = "QEGF7P1AWOGR6P6FS2B4";

    //$REQUEST_BODY = '{"iccid": ["423664658624"]}';
    $REQUEST_BODY = '';

    $API_SIGNATURE = strtoupper(base64_encode(hash_hmac('sha256', $API_KEY . $REQUEST_BODY . $API_NONCE, $API_SECRET, true)));
    //echo "API_SIGNATURE: ".$API_SIGNATURE."<br><br><br>";

    curl_setopt_array($curl, array(
      CURLOPT_URL => 'https://apiv2.datamobile.ag/getSimList',
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_ENCODING => '',
      CURLOPT_MAXREDIRS => 10,
      CURLOPT_TIMEOUT => 0,
      CURLOPT_FOLLOWLOCATION => true,
      CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
      CURLOPT_CUSTOMREQUEST => 'POST',
      CURLOPT_POST => 1,
      CURLOPT_POSTFIELDS => $REQUEST_BODY,
      CURLOPT_HTTPHEADER => array(
        'API-KEY: '.$API_KEY,
        'API-NONCE: '.$API_NONCE,
        'API-SIGNATURE: '.$API_SIGNATURE,
        'Content-Type: application/json',
        'API-ACTION: getSimList',
      ),
    ));

    $response = curl_exec($curl);

    curl_close($curl);

    $responseAsArray = json_decode($response, true);
  //print_r($responseAsArray);
    for ($i=0;$i < count($responseAsArray);$i++) {
        if ($responseAsArray[$i]['MSISDN'] === $data[0]['msisdn']) {
        //echo json_encode($responseAsArray[$i]);
        return $responseAsArray[$i]['ICCID'];
      }
    }
      return false;

      } else {
    return false;
  }

  }

function getSimStateFromICCID($iccid) {

  $curl = curl_init();

  curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);

  $API_NONCE = intval(microtime(true) * 1000);

  $API_KEY = "1T775M4EFGP34ETKO6PG";

  $API_SECRET = "QEGF7P1AWOGR6P6FS2B4";

  //$REQUEST_BODY = '{"iccid": ["423664658624"]}';

  $REQUEST_BODY = '{ "iccid": ["'.$iccid.'"] }';

  $API_SIGNATURE = strtoupper(base64_encode(hash_hmac('sha256', $API_KEY . $REQUEST_BODY . $API_NONCE, $API_SECRET, true)));
  //echo "API_SIGNATURE: ".$API_SIGNATURE."<br><br><br>";

  curl_setopt_array($curl, array(
    CURLOPT_URL => 'https://apiv2.datamobile.ag/getSIMStatus',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => '',
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 0,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_POST => 1,
    CURLOPT_POSTFIELDS => $REQUEST_BODY,
    CURLOPT_HTTPHEADER => array(
      'API-KEY: '.$API_KEY,
      'API-NONCE: '.$API_NONCE,
      'API-SIGNATURE: '.$API_SIGNATURE,
      'Content-Type: application/json',
      'API-ACTION: getSIMStatus',
    ),
  ));

  $info = curl_getinfo($curl);
  $response = curl_exec($curl);
  curl_close($curl);

  $responseAsArray = json_decode($response, true);

  if (isset($responseAsArray[$iccid]) AND $responseAsArray[$iccid] !== "") {
    return intVal($responseAsArray[$iccid]);
  } else {
    return $response;
  }

  }

  function setSimSubCustomerByICCID($iccid,$teleCareOrgId,$database, $imei) {

    $getDatamobileOrgId = $database->select("organisations", "*", [ "id" => $teleCareOrgId ]);

    $getDeviceData = $database->select("devices", "*", [ "imei" => $imei ]);

    $dataMobileOrgId = false;

    if (is_array($getDatamobileOrgId) AND count($getDatamobileOrgId) > 0) {
      if (isset($getDatamobileOrgId[0]['datamobileSubcustomerId']) AND is_numeric($getDatamobileOrgId[0]['datamobileSubcustomerId']) AND $getDatamobileOrgId[0]['datamobileSubcustomerId'] > 0) {
        $dataMobileOrgId = $getDatamobileOrgId[0]['datamobileSubcustomerId'];
      } else {
        return false;
      }
    }

    if (is_array($getDeviceData) AND count($getDeviceData) > 0 AND intval($getDeviceData[0]['datamobileSubcustomerId']) > 0) {
    $curl = curl_init();
    
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
    
    $API_NONCE = intval(microtime(true) * 1000);
    
    $API_KEY = "1T775M4EFGP34ETKO6PG";
    
    $API_SECRET = "QEGF7P1AWOGR6P6FS2B4";
    
    //$REQUEST_BODY = '{"iccid": ["423664658624"]}';
    
    $REQUEST_BODY = '{
        "account_id": "'.$dataMobileOrgId.'",
        "action": "remove",
        "iccids": [ "'.$iccid.'" ]
      }';
      
      $API_SIGNATURE = strtoupper(base64_encode(hash_hmac('sha256', $API_KEY . $REQUEST_BODY . $API_NONCE, $API_SECRET, true)));
      //echo "API_SIGNATURE: ".$API_SIGNATURE."<br><br><br>";
      
      curl_setopt_array($curl, array(
        CURLOPT_URL => 'https://apiv2.datamobile.ag/setSubcustomerSim',
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_ENCODING => '',
        CURLOPT_MAXREDIRS => 10,
        CURLOPT_TIMEOUT => 0,
        CURLOPT_FOLLOWLOCATION => true,
        CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
        CURLOPT_CUSTOMREQUEST => 'POST',
        CURLOPT_POST => 1,
        CURLOPT_POSTFIELDS => $REQUEST_BODY,
        CURLOPT_HTTPHEADER => array(
          'API-KEY: '.$API_KEY,
          'API-NONCE: '.$API_NONCE,
          'API-SIGNATURE: '.$API_SIGNATURE,
          'Content-Type: application/json',
          'API-ACTION: setSIMState',
        ),
      ));
      
      $info = curl_getinfo($curl);
      $response = curl_exec($curl);
      curl_close($curl);

      $responseAsArray = json_decode($response, true);

      if (isset($responseAsArray[$iccid]) AND $responseAsArray[$iccid] === "success") {
        $updateRemovedDataMobileSimSubCustomer = $database->update("devices", [
          "datamobileSubcustomerId" => 0
        ], [ "imei" => $imei ]);
      }
    }

    $curl = curl_init();
    
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
    
    $API_NONCE = intval(microtime(true) * 1000);
    
    $API_KEY = "1T775M4EFGP34ETKO6PG";
    
    $API_SECRET = "QEGF7P1AWOGR6P6FS2B4";
    
    //$REQUEST_BODY = '{"iccid": ["423664658624"]}';
    
    $REQUEST_BODY = '{
      "account_id": "'.$dataMobileOrgId.'",
      "action": "add",
      "iccids": [ "'.$iccid.'" ]
    }';
    
    $API_SIGNATURE = strtoupper(base64_encode(hash_hmac('sha256', $API_KEY . $REQUEST_BODY . $API_NONCE, $API_SECRET, true)));
    //echo "API_SIGNATURE: ".$API_SIGNATURE."<br><br><br>";
    
    curl_setopt_array($curl, array(
      CURLOPT_URL => 'https://apiv2.datamobile.ag/setSubcustomerSim',
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_ENCODING => '',
      CURLOPT_MAXREDIRS => 10,
      CURLOPT_TIMEOUT => 0,
      CURLOPT_FOLLOWLOCATION => true,
      CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
      CURLOPT_CUSTOMREQUEST => 'POST',
      CURLOPT_POST => 1,
      CURLOPT_POSTFIELDS => $REQUEST_BODY,
      CURLOPT_HTTPHEADER => array(
        'API-KEY: '.$API_KEY,
        'API-NONCE: '.$API_NONCE,
        'API-SIGNATURE: '.$API_SIGNATURE,
        'Content-Type: application/json',
        'API-ACTION: setSIMState',
      ),
    ));
    
    $info = curl_getinfo($curl);
    $response = curl_exec($curl);
    curl_close($curl);
    
    $responseAsArray = json_decode($response, true);
    
    if (isset($responseAsArray[$iccid]) AND $responseAsArray[$iccid] === "success") {
      $updateRemovedDataMobileSimSubCustomer = $database->update("devices", [
        "datamobileSubcustomerId" => $dataMobileOrgId
      ], [ "imei" => $imei ]);
      return true;
    } else {
      return $response;
    }
    
    }

function setSimStateFromICCID($iccid, $state) {

$curl = curl_init();

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);

$API_NONCE = intval(microtime(true) * 1000);

$API_KEY = "1T775M4EFGP34ETKO6PG";

$API_SECRET = "QEGF7P1AWOGR6P6FS2B4";

//$REQUEST_BODY = '{"iccid": ["423664658624"]}';

$REQUEST_BODY = '{
	"iccid": {
		"'.$iccid.'": {
			"setStatus": '.intval($state).'
		}
	}
}';

$API_SIGNATURE = strtoupper(base64_encode(hash_hmac('sha256', $API_KEY . $REQUEST_BODY . $API_NONCE, $API_SECRET, true)));
//echo "API_SIGNATURE: ".$API_SIGNATURE."<br><br><br>";

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://apiv2.datamobile.ag/setSIMState',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POST => 1,
  CURLOPT_POSTFIELDS => $REQUEST_BODY,
  CURLOPT_HTTPHEADER => array(
    'API-KEY: '.$API_KEY,
    'API-NONCE: '.$API_NONCE,
    'API-SIGNATURE: '.$API_SIGNATURE,
    'Content-Type: application/json',
    'API-ACTION: setSIMState',
  ),
));

$info = curl_getinfo($curl);
$response = curl_exec($curl);
curl_close($curl);

$responseAsArray = json_decode($response, true);

if (isset($responseAsArray[$iccid]) AND $responseAsArray[$iccid] === "success") {
  return true;
} else {
  return $response;
}

}

function didAllSmsTasksSucceed($database, $taskId) {
    $data = $database->select("queueSms", "*",
  [
    "taskId" => $taskId
  ]
  );

  $dataLen = count($data);

  if ($dataLen > 0) {
      //echo "count of subtasks is: ".$dataLen."\n";
      //print_r($data);
      //echo "\n";
      //return false;

  $countSuccessfulSms = 0;
  for($i=0;$i<$dataLen;$i++) {
      //echo "status === ".$data[$i]["status"]."\n";
      if (intVal($data[$i]["status"]) === 2) {
        //echo "successfulCount IS SUCCESSFULL \n";
          $countSuccessfulSms++;
      }
      //echo "successfulCount ===  ".$countSuccessfulSms."\n";
      //return false;
  }

  if ($countSuccessfulSms === count($data)) {
    $updateSms = $database->update("queueAssign", [
        "status" => 1
      ], [ "taskId" => $taskId ]);
      return true;
  } else {
      return false;
  }

} else {
    return false;
}

}

function didOneSmsTaskFail($database, $taskId) {
    $data = $database->select("queueSms", "*",
  [
    "taskId" => $taskId,
    "status" => 500
  ]
  );

  $dataLen = count($data);

  if ($dataLen > 0) {
      //echo "count of subtasks is: ".$dataLen."\n";
      //print_r($data);
      //echo "\n";
      //return false;

      $updateQueue = $database->update("queueAssign", [
          "status" => 500
        ], [ "taskId" => $taskId ]);
        return true;

  } else {
      return false;
  }

}


function checkDeviceOnlineStatus($deviceId) {
  // Construct the URL
  $url = "http://127.0.0.1:9999/server/deviceStatus/2d8u2hdu2iz27e2e290iu2er2it4gwztq3/{$deviceId}";

  // Initialize cURL session
  $curl = curl_init($url);

  // Set cURL options
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // Note: It's generally unsafe to set this to false in production

  // Execute cURL session
  $response = curl_exec($curl);

  // Close cURL session
  curl_close($curl);

  // Check if the cURL call was successful
  if ($response === false) {
      return false; // Could not fetch data
  }

  // Decode JSON response
  $data = json_decode($response, true);

  // Check if decoding was successful
  if (json_last_error() !== JSON_ERROR_NONE) {
      return false; // JSON decoding failed
  }

  // Check the online status and return it
  return !empty($data['onlineStatus']);
}


if (isset($_GET['action']) AND $_GET['action'] === "getMSISDN" AND isset($_GET['imei'])) {
  $imei = $_GET['imei'];
  $query = "SELECT d.*, o.name as orgName FROM devices d LEFT JOIN organisations o ON d.organisationId = o.id WHERE d.organisationId IN (SELECT id FROM organisations WHERE id = :orgId OR parentOrganisationId = :orgId) AND d.imei = :imei";
  $data = $database->query($query, [":orgId" => $orgId, ":imei" => $imei])->fetchAll();

  if (count($data) >= 0) {
    $getSIMStatus = getSimStateFromICCID(getICCIDByMSISDN($data[0]['msisdn']));
    if ($getSIMStatus !== false AND intVal($getSIMStatus) >= 0) {
      echo "{\"msisdn\":\"".$data[0]['msisdn']."\", \"status\":\"$getSIMStatus\"}";
    } else {
      echo "{\"msisdn\":\"".$data[0]['msisdn']."\", \"status\":\"error\"}";
    }
  } else {
    echo "{\"msisdn\":\"".$data[0]['msisdn']."\", \"status\":\"error\"}";
  }
}

if (isset($_GET['action']) AND $_GET['action'] === "enableSIM" AND isset($_GET['imei'])) {
    $imei = $_GET['imei'];
    $query = "SELECT d.*, o.name as orgName FROM devices d LEFT JOIN organisations o ON d.organisationId = o.id WHERE d.organisationId IN (SELECT id FROM organisations WHERE id = :orgId OR parentOrganisationId = :orgId) AND d.imei = :imei";
    $data = $database->query($query, [":orgId" => $orgId, ":imei" => $imei])->fetchAll();

    if (count($data) >= 0) {
      $configureSIM = setSimStateFromICCID(getICCIDByMSISDN($data[0]['msisdn']), 1);
      if ($configureSIM === true) {
        echo "{\"msisdn\":\"".$data[0]['msisdn']."\", \"status\":\"done\"}";
      } else {
        echo "{\"msisdn\":\"".$data[0]['msisdn']."\", \"status\":\"error\"}";
      }
    } else {
      echo "{\"msisdn\":\"".$data[0]['msisdn']."\", \"status\":\"error\"}";
    }
}

if (isset($_GET['action']) AND $_GET['action'] === "disableSIM" AND isset($_GET['imei'])) {
    $imei = $_GET['imei'];
    $query = "SELECT d.*, o.name as orgName FROM devices d LEFT JOIN organisations o ON d.organisationId = o.id WHERE d.organisationId IN (SELECT id FROM organisations WHERE id = :orgId OR parentOrganisationId = :orgId) AND d.imei = :imei";
    $data = $database->query($query, [":orgId" => $orgId, ":imei" => $imei])->fetchAll();

    if (count($data) >= 0) {
      $configureSIM = setSimStateFromICCID(getICCIDByMSISDN($data[0]['msisdn']), 0);
      if ($configureSIM === true) {
        echo "{\"msisdn\":\"".$data[0]['msisdn']."\", \"status\":\"done\"}";
      } else {
        echo "{\"msisdn\":\"".$data[0]['msisdn']."\", \"status\":\"error\"}";
      }
    } else {
      echo "{\"msisdn\":\"".$data[0]['msisdn']."\", \"status\":\"error\"}";
    }
}

if (isset($_GET['action']) AND $_GET['action'] === "returnDevice" AND isset($_GET['imei'])) {
  $imei = $_GET['imei'];
  $query = "SELECT d.*, o.name as orgName FROM devices d LEFT JOIN organisations o ON d.organisationId = o.id WHERE d.organisationId IN (SELECT id FROM organisations WHERE id = :orgId OR parentOrganisationId = :orgId) AND d.imei = :imei";
  $data = $database->query($query, [":orgId" => $orgId, ":imei" => $imei])->fetchAll();

  if (count($data) >= 0) {

    $timestamp = time();
    $taskId = md5($timestamp);

    /*
    $returnDevice = $database->insert("taskQueue", [
      "packetType" => "tcpOnlineTest",
      "sequenceId" => random_int(1,9999),
      "lastModificationTimestamp" => time(),
      "status" => 0,
      "taskId" => $taskId."tcpOnlineCheck",
      "imei" => $data[0]['imei'],
      "simPlatformId" => $data[0]['simPlatformId'],
      "msisdn" => $data[0]['msisdn'],
      "packetBodyJson" => ""
    ]);
    */

    $returnDevice = $database->insert("taskQueue", [
      "packetType" => "resetDevice",
      "sequenceId" => random_int(1,9999),
      //"onlyRunAfterTaskWithIdXCompleted" => $taskId."tcpOnlineCheck",
      "lastModificationTimestamp" => $timestamp,
      "initiatedTimestamp" => $timestamp,
      "status" => 0,
      "taskId" => $taskId,
      "imei" => $data[0]['imei'],
      "simPlatformId" => $data[0]['simPlatformId'],
      "msisdn" => $data[0]['msisdn'],
      "packetBodyJson" => "",
      "forUserId" => $_SESSION['id']
    ]);



    //apply SHUTDOWN Package after successfull reset and 1min time passed
    
    $shutdownDevice = $database->insert("taskQueue", [
      "packetType" => "shutdownDevice",
      "sequenceId" => random_int(1,9999),
      "onlyRunAfterTaskWithIdXCompleted" => $taskId,
      "runWithDelay" => 120,
      "lastModificationTimestamp" => $timestamp,
      "initiatedTimestamp" => $timestamp,
      "status" => 0,
      "taskId" => $taskId."_2",
      "imei" => $data[0]['imei'],
      "simPlatformId" => $data[0]['simPlatformId'],
      "msisdn" => $data[0]['msisdn'],
      "packetBodyJson" => "",
      "forUserId" => $_SESSION['id']
    ]);

    $returnDevice = $database->insert("taskQueue", [
      "packetType" => "resetDeviceSuccessfull",
      "sequenceId" => random_int(1,9999),
      "onlyRunAfterTaskWithIdXCompleted" => $taskId."_2",
      "runWithDelay" => 10,
      "lastModificationTimestamp" => $timestamp,
      "initiatedTimestamp" => $timestamp,
      "status" => 0,
      "taskId" => $taskId."_3",
      "imei" => $data[0]['imei'],
      "simPlatformId" => $data[0]['simPlatformId'],
      "msisdn" => $data[0]['msisdn'],
      "packetBodyJson" => "",
      "forUserId" => $_SESSION['id']
    ]);

    if ($returnDevice->rowCount() > 0) {
        echo "{\"msisdn\":\"".$data[0]['msisdn']."\", \"status\":\"done\"}";
    } else {
        echo "{\"msisdn\":\"".$data[0]['msisdn']."\", \"status\":\"error\"}";
  }


  } else {
    echo "{\"msisdn\":\"".$data[0]['msisdn']."\", \"status\":\"error\"}";
  }
  }

if (isset($_GET['action']) AND $_GET['action'] === "shutdownDevice" AND isset($_GET['imei'])) {
  $timestamp = time();
  $taskId = md5($timestamp);
  $imei = $_GET['imei'];
  $query = "SELECT d.*, o.name as orgName FROM devices d LEFT JOIN organisations o ON d.organisationId = o.id WHERE d.organisationId IN (SELECT id FROM organisations WHERE id = :orgId OR parentOrganisationId = :orgId) AND d.imei = :imei";
  $data = $database->query($query, [":orgId" => $orgId, ":imei" => $imei])->fetchAll();

  $shutdownHomeWifi = $database->insert("taskQueue", [
    "packetType" => "shutdownDevice",
    "sequenceId" => random_int(1,9999),
    "lastModificationTimestamp" => $timestamp,
    "initiatedTimestamp" => $timestamp,
    "status" => 0,
    "taskId" => $taskId,
    "imei" => $data[0]['imei'],
    "simPlatformId" => $data[0]['simPlatformId'],
    "msisdn" => $data[0]['msisdn'],
    "packetBodyJson" => "",
    "forUserId" => $_SESSION['id']
  ]);

  if ($shutdownHomeWifi->rowCount() > 0) {
      echo "{\"msisdn\":\"".$data[0]['msisdn']."\", \"status\":\"done\"}";
  } else {
      echo "{\"msisdn\":\"".$data[0]['msisdn']."\", \"status\":\"error\"}";
  }
}

if (isset($_GET['action']) AND $_GET['action'] === "deleteHomeWifi" AND isset($_GET['imei'])) {
  $imei = $_GET['imei'];

  $timestamp = time();
  $taskId = md5($timestamp);

  $query = "SELECT d.*, o.name as orgName FROM devices d LEFT JOIN organisations o ON d.organisationId = o.id WHERE d.organisationId IN (SELECT id FROM organisations WHERE id = :orgId OR parentOrganisationId = :orgId) AND d.imei = :imei";
  $data = $database->query($query, [":orgId" => $orgId, ":imei" => $imei])->fetchAll();

  if (count($data) >= 0) {

    $insertHomeWifi = $database->insert("taskQueue", [
      "packetType" => "updateHomeWifi",
      "sequenceId" => random_int(1,9999),
      "lastModificationTimestamp" => $timestamp,
      "initiatedTimestamp" => $timestamp,
      "status" => 0,
      "taskId" => $taskId,
      "imei" => $data[0]['imei'],
      "simPlatformId" => $data[0]['simPlatformId'],
        "msisdn" => $data[0]['msisdn'],
        "forUserId" => $_SESSION['id'],
      "packetBodyJson" => json_encode([
        "homeWifiMac1" => "00:00:00:00:00:00",
        "homeWifiDescr1" => "",
        "homeWifiLat1" => "0.0",
        "homeWifiLng1" => "0.0",
        "homeWifiMac2" => "00:00:00:00:00:00",
        "homeWifiDescr2" => "",
        "homeWifiLat2" => "0.0",
        "homeWifiLng2" => "0.0",
        "homeWifiMac3" => "00:00:00:00:00:00",
        "homeWifiDescr3" => "",
        "homeWifiLat3" => "0.0",
        "homeWifiLng3" => "0.0",
        "homeWifiMac4" => "00:00:00:00:00:00",
        "homeWifiDescr4" => "",
        "homeWifiLat4" => "0.0",
        "homeWifiLng4" => "0.0",
        "homeWifiMac5" => "00:00:00:00:00:00",
        "homeWifiDescr5" => "",
        "homeWifiLat5" => "0.0",
        "homeWifiLng5" => "0.0",
        "homeWifiMac6" => "00:00:00:00:00:00",
        "homeWifiDescr6" => "",
        "homeWifiLat6" => "0.0",
        "homeWifiLng6" => "0.0",
        "homeWifiMac7" => "00:00:00:00:00:00",
        "homeWifiDescr7" => "",
        "homeWifiLat7" => "0.0",
        "homeWifiLng7" => "0.0",
        "homeWifiMac8" => "00:00:00:00:00:00",
        "homeWifiDescr8" => "",
        "homeWifiLat8" => "0.0",
        "homeWifiLng8" => "0.0",
        "homeWifiMac9" => "00:00:00:00:00:00",
        "homeWifiDescr9" => "",
        "homeWifiLat9" => "0.0",
        "homeWifiLng9" => "0.0",
        "homeWifiMac10" => "00:00:00:00:00:00",
        "homeWifiDescr10" => "",
        "homeWifiLat10" => "0.0",
        "homeWifiLng10" => "0.0"
      ])
    ]);

      $assignDevice = $database->update("devices", [
        "homeWifiMac1" => "",
        "homeWifiDescr1" => "",
        "homeWifiLat1" => "",
        "homeWifiLng1" => "",
        "homeWifiMac2" => "",
        "homeWifiDescr2" => "",
        "homeWifiLat2" => "",
        "homeWifiLng2" => "",
        "homeWifiMac3" => "",
        "homeWifiDescr3" => "",
        "homeWifiLat3" => "",
        "homeWifiLng3" => "",
        "homeWifiMac4" => "",
        "homeWifiDescr4" => "",
        "homeWifiLat4" => "",
        "homeWifiLng4" => "",
        "homeWifiMac5" => "",
        "homeWifiDescr5" => "",
        "homeWifiLat5" => "",
        "homeWifiLng5" => "",
        "homeWifiMac6" => "",
        "homeWifiDescr6" => "",
        "homeWifiLat6" => "",
        "homeWifiLng6" => "",
        "homeWifiMac7" => "",
        "homeWifiDescr7" => "",
        "homeWifiLat7" => "",
        "homeWifiLng7" => "",
        "homeWifiMac8" => "",
        "homeWifiDescr8" => "",
        "homeWifiLat8" => "",
        "homeWifiLng8" => "",
        "homeWifiMac9" => "",
        "homeWifiDescr9" => "",
        "homeWifiLat9" => "",
        "homeWifiLng9" => "",
        "homeWifiMac10" => "",
        "homeWifiDescr10" => "",
        "homeWifiLat10" => "",
        "homeWifiLng10" => ""
      ], [ "imei" => $imei,
      "organisationId" => $data[0]['organisationId'] ]);

      echo "{\"status\":\"done\", \"response\":\"$command\"}";
  } else {
    echo "{\"msisdn\":\"".$data[0]['msisdn']."\", \"status\":\"error\"}";
  }
}

if (isset($_GET['action']) AND $_GET['action'] === "load" AND isset($_GET['imei']) AND !isset($_POST['umoDeviceIdInput'])) {
  $imei = $_GET['imei'];
  $query = "SELECT d.*, o.name as orgName FROM devices d LEFT JOIN organisations o ON d.organisationId = o.id WHERE d.organisationId IN (SELECT id FROM organisations WHERE id = :orgId OR parentOrganisationId = :orgId) AND d.imei = :imei";
  $data = $database->query($query, [":orgId" => $orgId, ":imei" => $imei])->fetchAll();

  if (is_array($data) AND count($data) > 0) {

    if ($data[0]['simPlatformId'] == 1) {

      $data[0]['simStatus'] = 2;
      $data[0]['simOnlineStatus'] = checkDeviceOnlineStatus($imei);
      
    } else {
      $tempSimList = getCachedSimList();
      $tempGetSim = getSimForMSISDNFromList($tempSimList, $data[0]['msisdn']);
      //echo "tempGetSim === ";
      //print_r($tempGetSim);

     if ($tempGetSim !== false AND count($tempGetSim) > 0) {
      $data[0]['simStatus'] = $tempGetSim['SimStatus'];
      $data[0]['simOnlineStatus'] = $tempGetSim['OnlineStatus'];
     } else {
      //echo json_encode(array("error" => "devices not found in SIM DB"));
      //exit();
      //echo "1 tempGetSim === false or count() === 0";
      //print_r($tempGetSim);
     }
    }

    echo json_encode(array("data" => $data));
  } else {
    echo json_encode(array("error" => "devices not found"));
  }
}


if (isset($_GET['action']) AND $_GET['action'] === "loadAll") {

  $query = "SELECT d.*, o.name as orgName FROM devices d LEFT JOIN organisations o ON d.organisationId = o.id WHERE d.organisationId IN (SELECT id FROM organisations WHERE id = :orgId OR parentOrganisationId = :orgId)";
  $data = $database->query($query, [":orgId" => $orgId])->fetchAll();

  if (count($data) > 0) {
    // Use cached SIM list instead of individual API calls per device
    $tempSimList = getCachedSimList();
    foreach($data as &$row) {  // Use reference to modify $data
      $tempGetSim = getSimForMSISDNFromList($tempSimList, $row['msisdn']);
      //echo "tempGetSim === ";
      //print_r($tempGetSim);

      if ($tempGetSim !== false AND count($tempGetSim) > 0) {
        $row['simStatus'] = $tempGetSim['SimStatus'];
        $row['simOnlineStatus'] = $tempGetSim['OnlineStatus'];
      }
    }
    unset($row); // Break the reference

    echo json_encode(array("data" => $data));
  } else {
    echo json_encode(array("error" => "devices not found"));
  }
}

if (isset($_GET['action']) AND $_GET['action'] === "loadEverything") {
  

  $query = "SELECT d.*, o.name as orgName FROM devices d LEFT JOIN organisations o ON d.organisationId = o.id WHERE d.organisationId IN (SELECT id FROM organisations WHERE id = :orgId OR parentOrganisationId = :orgId)";
  $data = $database->query($query, [":orgId" => $orgId])->fetchAll();

  if (count($data) > 0) {
    $tempSimList = getCachedSimList();
    foreach($data as $row) {
      $tempGetSim = getSimForMSISDNFromList($tempSimList,$row['msisdn']);
      //echo "tempGetSim === ";
      //print_r($tempGetSim);

      if ($tempGetSim !== false AND count($tempGetSim) > 0) {
        $row['simStatus'] = $tempGetSim['SimStatus'];
        $row['simOnlineStatus'] = $tempGetSim['OnlineStatus'];
      }
    }

    echo json_encode(array("data" => $data));
  } else {
    echo json_encode(array("error" => "devices not found"));
  }
}

if (isset($_GET['action']) AND $_GET['action'] === "loadTasks") {

  $data = $database->select("taskQueue",
    ["id", "taskId", "imei", "status", "packetType", "lastModificationTimestamp"],
    [
        "forUserId" => $_SESSION['id'],
        "ORDER" => ["id" => "DESC"],
        "LIMIT" => 15
    ]
);

  if (is_array($data) AND count($data) > 0) {

    echo json_encode(array("data" => $data));
  } else {
    echo json_encode(array("data" => []));
  }
}

if (isset($_GET['action']) AND $_GET['action'] === "loadOrg" AND isset($_GET['orgId'])) {

  $query = "SELECT d.*, o.name as orgName FROM devices d LEFT JOIN organisations o ON d.organisationId = o.id WHERE d.organisationId IN (SELECT id FROM organisations WHERE id = :orgId OR parentOrganisationId = :orgId)";
  $data = $database->query($query, [":orgId" => $orgId])->fetchAll();

  if (count($data) > 0) {
    $simList = getCachedSimList();
    foreach($data as &$row) {
      if ($simList !== false) {
        $tempGetSim = getSimForMSISDNFromList($simList, $row['msisdn']);
        if ($tempGetSim !== false) {
          $row['simStatus'] = $tempGetSim['SimStatus'];
          $row['simOnlineStatus'] = $tempGetSim['OnlineStatus'];
        }
      }
    }
    unset($row);

    echo json_encode(array("data" => $data));
  } else {
    echo json_encode(array("data" => []));
  }
}



if (isset($_GET['action']) AND $_GET['action'] === "saveData" AND isset($_POST['umoDeviceIdInput']) AND isset($_GET['imei'])) {
  $imei = $_GET['imei'];
  $query = "SELECT d.*, o.name as orgName FROM devices d LEFT JOIN organisations o ON d.organisationId = o.id WHERE d.organisationId IN (SELECT id FROM organisations WHERE id = :orgId OR parentOrganisationId = :orgId) AND d.imei = :imei";
  $data = $database->query($query, [":orgId" => $orgId, ":imei" => $imei])->fetchAll();
  if (count($data) !== 1) {
    echo '{"imei": "'.$imei.'", "status": "error", "message": "unauthorized / device not found!"}';
    exit();
  }

  if (!empty($_POST['umoDeviceIdInput'])) {

    $homeWifiInstances = [];

    // Collect all complete instances
    for ($i = 1; $i <= 10; $i++) {
        if (!empty($_POST["homeWifiMac$i"]) && !empty($_POST["homeWifiLat$i"]) && !empty($_POST["homeWifiLng$i"])) {
            $instance = [
                'mac' => $_POST["homeWifiMac$i"],
                'lat' => $_POST["homeWifiLat$i"],
                'lng' => $_POST["homeWifiLng$i"],
                'descr' => !empty($_POST["homeWifiDescr$i"]) ? str_replace(' ', '_', $_POST["homeWifiDescr$i"]) : "leer",
                'longName' => isset($_POST["homeWifiLongName$i"]) ? $_POST["homeWifiLongName$i"] : ""
            ];
            $homeWifiInstances[] = $instance;
        }
    }
    
    // Set the variables from the $homeWifiInstances array
    for ($i = 1; $i <= 10; $i++) {
      if (isset($homeWifiInstances[$i - 1])) {
          if (validateCoordinates($homeWifiInstances[$i - 1]['lat'], $homeWifiInstances[$i - 1]['lng'])) {
            ${"homeWifiMac$i"} = $homeWifiInstances[$i - 1]['mac'];
            ${"homeWifiLat$i"} = $homeWifiInstances[$i - 1]['lat'];
            ${"homeWifiLng$i"} = $homeWifiInstances[$i - 1]['lng'];
            ${"homeWifiDescr$i"} = $homeWifiInstances[$i - 1]['descr'];
            ${"homeWifiLongName$i"} = $homeWifiInstances[$i - 1]['longName'];
          } else {
            echo '{"msisdn": "'.$data[0]['msisdn'].'", "status": "error", "message": "Invalid GPS coordinates!" }';
            return;
          }
      } else {
          ${"homeWifiMac$i"} = "";
          ${"homeWifiLat$i"} = "";
          ${"homeWifiLng$i"} = "";
          ${"homeWifiDescr$i"} = "";
          ${"homeWifiLongName$i"} = "";
      }
  }

    if (isset($_POST['homeWifiMac']) AND !empty($_POST['homeWifiMac'])) { $homeWifiMac = $_POST['homeWifiMac']; } else { $homeWifiMac = ""; }
    if (isset($_POST['homeWifiLat']) AND !empty($_POST['homeWifiLat'])) { $homeWifiLat = $_POST['homeWifiLat']; } else { $homeWifiLat = ""; }
    if (isset($_POST['homeWifiLng']) AND !empty($_POST['homeWifiLng'])) { $homeWifiLng = $_POST['homeWifiLng']; } else { $homeWifiLng = ""; }
    if (isset($_POST['homeWifiDescr']) AND !empty($_POST['homeWifiDescr'])) { $homeWifiDescr = str_replace(' ','_',$_POST['homeWifiDescr']); } else { $homeWifiDescr = ""; }

    if (isset($_POST['homeBeaconMac']) AND !empty($_POST['homeBeaconMac'])) { $homeBeaconMac = $_POST['homeBeaconMac']; } else { $homeBeaconMac = ""; }
    if (isset($_POST['homeBeaconLat']) AND !empty($_POST['homeBeaconLat'])) { $homeBeaconLat = $_POST['homeBeaconLat']; } else { $homeBeaconLat = ""; }
    if (isset($_POST['homeBeaconLng']) AND !empty($_POST['homeBeaconLng'])) { $homeBeaconLng = $_POST['homeBeaconLng']; } else { $homeBeaconLng = ""; }
    if (isset($_POST['homeBeaconDescr']) AND !empty($_POST['homeBeaconDescr'])) { $homeBeaconDescr = str_replace(' ','_',$_POST['homeBeaconDescr']); } else { $homeBeaconDescr = ""; }

    $organisationId = $data[0]['organisationId'];
    $imei = $_GET['imei'];
    $umoDeviceId = $_POST['umoDeviceIdInput'];
    $deviceStatus = "off";
    $translatedSIMStatus = "";
    if (isset($_POST['deviceStatus']) AND !empty($_POST['deviceStatus']) AND $_POST['deviceStatus'] == "on") {
      $deviceStatus = "2";
      $translatedSIMStatus = 1;
    } else {
      $deviceStatus = "1";
      $translatedSIMStatus = 0;
    }

    $assignDevice = $database->update("devices", [
      "umoDeviceId" => $umoDeviceId,
      "homeWifiMac1" => $homeWifiMac1,
      "homeWifiDescr1" => $homeWifiDescr1,
      "homeWifiLat1" => $homeWifiLat1,
      "homeWifiLng1" => $homeWifiLng1,
      "homeWifiLongName1" => $homeWifiLongName1,
      "homeWifiMac2" => $homeWifiMac2,
      "homeWifiDescr2" => $homeWifiDescr2,
      "homeWifiLat2" => $homeWifiLat2,
      "homeWifiLng2" => $homeWifiLng2,
      "homeWifiLongName2" => $homeWifiLongName2,
      "homeWifiMac3" => $homeWifiMac3,
      "homeWifiDescr3" => $homeWifiDescr3,
      "homeWifiLat3" => $homeWifiLat3,
      "homeWifiLng3" => $homeWifiLng3,
      "homeWifiLongName3" => $homeWifiLongName3,
      "homeWifiMac4" => $homeWifiMac4,
      "homeWifiDescr4" => $homeWifiDescr4,
      "homeWifiLat4" => $homeWifiLat4,
      "homeWifiLng4" => $homeWifiLng4,
      "homeWifiLongName4" => $homeWifiLongName4,
      "homeWifiMac5" => $homeWifiMac5,
      "homeWifiDescr5" => $homeWifiDescr5,
      "homeWifiLat5" => $homeWifiLat5,
      "homeWifiLng5" => $homeWifiLng5,
      "homeWifiLongName5" => $homeWifiLongName5,
      "homeWifiMac6" => $homeWifiMac6,
      "homeWifiDescr6" => $homeWifiDescr6,
      "homeWifiLat6" => $homeWifiLat6,
      "homeWifiLng6" => $homeWifiLng6,
      "homeWifiLongName6" => $homeWifiLongName6,
      "homeWifiMac7" => $homeWifiMac7,
      "homeWifiDescr7" => $homeWifiDescr7,
      "homeWifiLat7" => $homeWifiLat7,
      "homeWifiLng7" => $homeWifiLng7,
      "homeWifiLongName7" => $homeWifiLongName7,
      "homeWifiMac8" => $homeWifiMac8,
      "homeWifiDescr8" => $homeWifiDescr8,
      "homeWifiLat8" => $homeWifiLat8,
      "homeWifiLng8" => $homeWifiLng8,
      "homeWifiLongName8" => $homeWifiLongName8,
      "homeWifiMac9" => $homeWifiMac9,
      "homeWifiDescr9" => $homeWifiDescr9,
      "homeWifiLat9" => $homeWifiLat9,
      "homeWifiLng9" => $homeWifiLng9,
      "homeWifiLongName9" => $homeWifiLongName9,
      "homeWifiMac10" => $homeWifiMac10,
      "homeWifiDescr10" => $homeWifiDescr10,
      "homeWifiLat10" => $homeWifiLat10,
      "homeWifiLng10" => $homeWifiLng10,
      "homeWifiLongName10" => $homeWifiLongName10,
      "homeBeaconMac" => $homeBeaconMac,
      "homeBeaconLat" => $homeBeaconLat,
      "homeBeaconLng" => $homeBeaconLng,
      "homeBeaconDescr" => $homeBeaconDescr,
      "homeBeaconMac" => $homeBeaconMac,
      "homeBeaconLat" => $homeBeaconLat,
      "homeBeaconLng" => $homeBeaconLng,
      "homeBeaconDescr" => $homeBeaconDescr
    ], [ "imei" => $imei,
      "organisationId" => $data[0]['organisationId'] ]);

    $data = $database->select("devices", "*",
    [ "imei" => $imei,
      "organisationId" => $data[0]['organisationId'] ]
    );

    //print_r($assignDevice);

    if (!$assignDevice) {
      echo '{"msisdn": "'.$data[0]['msisdn'].'", "status": "error"}';
    } else {
      echo '{"msisdn": "'.$data[0]['msisdn'].'", "status": "done"}';
    }

  } else {
      echo '{"msisdn": "'.$data[0]['msisdn'].'", "status": "error"}';
  }

}

if (isset($_GET['action']) AND $_GET['action'] === "saveSubmit" AND isset($_POST['umoDeviceIdInput']) AND isset($_GET['imei'])) {

  $imei = $_GET['imei'];
  $query = "SELECT d.*, o.name as orgName FROM devices d LEFT JOIN organisations o ON d.organisationId = o.id WHERE d.organisationId IN (SELECT id FROM organisations WHERE id = :orgId OR parentOrganisationId = :orgId) AND d.imei = :imei";
  $data = $database->query($query, [":orgId" => $orgId, ":imei" => $imei])->fetchAll();
  if (count($data) !== 1) {
    echo '{"imei": "'.$imei.'", "status": "error", "message": "unauthorized / device not found!"}';
    exit();
  }

  if (!empty($_POST['umoDeviceIdInput'])) {

    $homeWifiInstances = [];

    // Collect all complete instances
    for ($i = 1; $i <= 10; $i++) {
        if (!empty($_POST["homeWifiMac$i"]) && !empty($_POST["homeWifiLat$i"]) && !empty($_POST["homeWifiLng$i"])) {
            $instance = [
                'mac' => $_POST["homeWifiMac$i"],
                'lat' => $_POST["homeWifiLat$i"],
                'lng' => $_POST["homeWifiLng$i"],
                'descr' => !empty($_POST["homeWifiDescr$i"]) ? str_replace(' ', '_', $_POST["homeWifiDescr$i"]) : "leer",
                'longName' => isset($_POST["homeWifiLongName$i"]) ? $_POST["homeWifiLongName$i"] : ""
            ];
            $homeWifiInstances[] = $instance;
        }
    }
    
    // Set the variables from the $homeWifiInstances array
    for ($i = 1; $i <= 10; $i++) {
        if (isset($homeWifiInstances[$i - 1])) {
          if (validateCoordinates($homeWifiInstances[$i - 1]['lat'], $homeWifiInstances[$i - 1]['lng'])) {
            ${"homeWifiMac$i"} = $homeWifiInstances[$i - 1]['mac'];
            ${"homeWifiLat$i"} = $homeWifiInstances[$i - 1]['lat'];
            ${"homeWifiLng$i"} = $homeWifiInstances[$i - 1]['lng'];
            ${"homeWifiDescr$i"} = $homeWifiInstances[$i - 1]['descr'];
            ${"homeWifiLongName$i"} = $homeWifiInstances[$i - 1]['longName'];
        } else {
          echo '{"msisdn": "'.$data[0]['msisdn'].'", "status": "error", "simUpdateStatus": "error", "simUpdateError": "Invalid GPS coordinates!"}';
          return;
        }
    } else {
            ${"homeWifiMac$i"} = "";
            ${"homeWifiLat$i"} = "";
            ${"homeWifiLng$i"} = "";
            ${"homeWifiDescr$i"} = "";
            ${"homeWifiLongName$i"} = "";
        }
    }

    if (isset($_POST['homeBeaconMac']) AND !empty($_POST['homeBeaconMac'])) { $homeBeaconMac = $_POST['homeBeaconMac']; } else { $homeBeaconMac = ""; }
    if (isset($_POST['homeBeaconLat']) AND !empty($_POST['homeBeaconLat'])) { $homeBeaconLat = $_POST['homeBeaconLat']; } else { $homeBeaconLat = ""; }
    if (isset($_POST['homeBeaconLng']) AND !empty($_POST['homeBeaconLng'])) { $homeBeaconLng = $_POST['homeBeaconLng']; } else { $homeBeaconLng = ""; }
    if (isset($_POST['homeBeaconDescr']) AND !empty($_POST['homeBeaconDescr'])) { $homeBeaconDescr = str_replace(' ','_',$_POST['homeBeaconDescr']); } else { $homeBeaconDescr = ""; }

    $organisationId = $data[0]['organisationId'];
    $imei = $_GET['imei'];
    $umoDeviceId = $_POST['umoDeviceIdInput'];
    $deviceStatus = "2";
    $translatedSIMStatus = 1;

    $assignDevice = $database->update("devices", [
      "active" => $deviceStatus,
      "umoDeviceId" => $umoDeviceId,
      "homeWifiMac1" => $homeWifiMac1,
      "homeWifiDescr1" => $homeWifiDescr1,
      "homeWifiLat1" => $homeWifiLat1,
      "homeWifiLng1" => $homeWifiLng1,
      "homeWifiLongName1" => $homeWifiLongName1,
      "homeWifiMac2" => $homeWifiMac2,
      "homeWifiDescr2" => $homeWifiDescr2,
      "homeWifiLat2" => $homeWifiLat2,
      "homeWifiLng2" => $homeWifiLng2,
      "homeWifiLongName2" => $homeWifiLongName2,
      "homeWifiMac3" => $homeWifiMac3,
      "homeWifiDescr3" => $homeWifiDescr3,
      "homeWifiLat3" => $homeWifiLat3,
      "homeWifiLng3" => $homeWifiLng3,
      "homeWifiLongName3" => $homeWifiLongName3,
      "homeWifiMac4" => $homeWifiMac4,
      "homeWifiDescr4" => $homeWifiDescr4,
      "homeWifiLat4" => $homeWifiLat4,
      "homeWifiLng4" => $homeWifiLng4,
      "homeWifiLongName4" => $homeWifiLongName4,
      "homeWifiMac5" => $homeWifiMac5,
      "homeWifiDescr5" => $homeWifiDescr5,
      "homeWifiLat5" => $homeWifiLat5,
      "homeWifiLng5" => $homeWifiLng5,
      "homeWifiLongName5" => $homeWifiLongName5,
      "homeWifiMac6" => $homeWifiMac6,
      "homeWifiDescr6" => $homeWifiDescr6,
      "homeWifiLat6" => $homeWifiLat6,
      "homeWifiLng6" => $homeWifiLng6,
      "homeWifiLongName6" => $homeWifiLongName6,
      "homeWifiMac7" => $homeWifiMac7,
      "homeWifiDescr7" => $homeWifiDescr7,
      "homeWifiLat7" => $homeWifiLat7,
      "homeWifiLng7" => $homeWifiLng7,
      "homeWifiLongName7" => $homeWifiLongName7,
      "homeWifiMac8" => $homeWifiMac8,
      "homeWifiDescr8" => $homeWifiDescr8,
      "homeWifiLat8" => $homeWifiLat8,
      "homeWifiLng8" => $homeWifiLng8,
      "homeWifiLongName8" => $homeWifiLongName8,
      "homeWifiMac9" => $homeWifiMac9,
      "homeWifiDescr9" => $homeWifiDescr9,
      "homeWifiLat9" => $homeWifiLat9,
      "homeWifiLng9" => $homeWifiLng9,
      "homeWifiLongName9" => $homeWifiLongName9,
      "homeWifiMac10" => $homeWifiMac10,
      "homeWifiDescr10" => $homeWifiDescr10,
      "homeWifiLat10" => $homeWifiLat10,
      "homeWifiLng10" => $homeWifiLng10,
      "homeWifiLongName10" => $homeWifiLongName10,
      "homeBeaconMac" => $homeBeaconMac,
      "homeBeaconLat" => $homeBeaconLat,
      "homeBeaconLng" => $homeBeaconLng,
      "homeBeaconDescr" => $homeBeaconDescr
    ], [ "imei" => $imei]);

    $timestamp = time();
    $taskId = md5($timestamp);

      $taskIdDelete = md5($timestamp)."_1.5";

      $taskIdTwo = $taskId."_2";

      $data = $database->select("devices", "*",
      [ "imei" => $imei]
      );

    //print_r($assignDevice);

    $insertAssignQueueError = $database->error;

    //print_r($assignDevice);

    if ($insertAssignQueueError !== null) {
      echo "{\"status\":\"error\"}";
    } else {

      setSimSubCustomerByICCID(getICCIDByMSISDN($data[0]['msisdn']),$data[0]['organisationId'],$database, $imei);

      if ($data[0]['simPlatformId'] == 1) {
          echo '{"msisdn": "'.$data[0]['msisdn'].'", "status": "done", "desiredSIMState": '.$translatedSIMStatus.', "simUpdateStatus": "done"}';
      } else {
        $configureSIM = setSimStateFromICCID(getICCIDByMSISDN($data[0]['msisdn']), $translatedSIMStatus);
        if ($configureSIM === true) {
          echo '{"msisdn": "'.$data[0]['msisdn'].'", "status": "done", "desiredSIMState": '.$translatedSIMStatus.', "simUpdateStatus": "done"}';
        } else {
          error_log('!!!! ERROR: $configureSIM === '.$configureSIM);
          $errorMsg = clean($configureSIM);
          echo '{"msisdn": "'.$data[0]['msisdn'].'", "status": "done", "desiredSIMState": '.$translatedSIMStatus.', "simUpdateStatus": "error", "simUpdateError": "'.$errorMsg.'"}';
        }
      }
      

      $orgData = $database->select("organisations", "*",
      [ "id" => $organisationId ]
      );
  
        $configContactNamesArray = array();
        if ($orgData[0]["emergencyNumbers"] !== "" AND $orgData[0]["emergencyNumbers"] !== null) $configContactNamesArray = json_decode($orgData[0]["emergencyNumbers"], true);

        $relativeNumbersArray = array();
        if (isset($data[0]["relativeNumbers"]) && $data[0]["relativeNumbers"] !== "" && $data[0]["relativeNumbers"] !== null) $relativeNumbersArray = json_decode($data[0]["relativeNumbers"], true);

        $setNumberNamesQuery = $database->insert("taskQueue", [
        "packetType" => "multi_transmitConfig",
          "sequenceId" => random_int(1,9999),
          "lastModificationTimestamp" => $timestamp,
          "initiatedTimestamp" => $timestamp,
          "status" => 0,
          "taskId" => $taskId,
          "runWithDelay" => 120,
          "imei" => $data[0]['imei'],
          "simPlatformId" => $data[0]['simPlatformId'],
          "deviceType" => $data[0]['hardwareDeviceType'],
          "msisdn" => $data[0]['msisdn'],
        "packetBodyJson" => json_encode(
          [ "timeIntervalConfig" => 
            [
              "heartBeat" => 3600, 
              "autoUpload" => 10800, 
              "autoUploadLazy" => 43200,
            ], 
          "wifiData" => [
            "homeWifiMac1" => $homeWifiMac1,
            "homeWifiDescr1" => $homeWifiDescr1,
            "homeWifiLat1" => $homeWifiLat1,
            "homeWifiLng1" => $homeWifiLng1,
            "homeWifiMac2" => $homeWifiMac2,
            "homeWifiDescr2" => $homeWifiDescr2,
            "homeWifiLat2" => $homeWifiLat2,
            "homeWifiLng2" => $homeWifiLng2,
            "homeWifiMac3" => $homeWifiMac3,
            "homeWifiDescr3" => $homeWifiDescr3,
            "homeWifiLat3" => $homeWifiLat3,
            "homeWifiLng3" => $homeWifiLng3,
            "homeWifiMac4" => $homeWifiMac4,
            "homeWifiDescr4" => $homeWifiDescr4,
            "homeWifiLat4" => $homeWifiLat4,
            "homeWifiLng4" => $homeWifiLng4,
            "homeWifiMac5" => $homeWifiMac5,
            "homeWifiDescr5" => $homeWifiDescr5,
            "homeWifiLat5" => $homeWifiLat5,
            "homeWifiLng5" => $homeWifiLng5,
            "homeWifiMac6" => $homeWifiMac6,
            "homeWifiDescr6" => $homeWifiDescr6,
            "homeWifiLat6" => $homeWifiLat6,
            "homeWifiLng6" => $homeWifiLng6,
            "homeWifiMac7" => $homeWifiMac7,
            "homeWifiDescr7" => $homeWifiDescr7,
            "homeWifiLat7" => $homeWifiLat7,
            "homeWifiLng7" => $homeWifiLng7,
            "homeWifiMac8" => $homeWifiMac8,
            "homeWifiDescr8" => $homeWifiDescr8,
            "homeWifiLat8" => $homeWifiLat8,
            "homeWifiLng8" => $homeWifiLng8,
            "homeWifiMac9" => $homeWifiMac9,
            "homeWifiDescr9" => $homeWifiDescr9,
            "homeWifiLat9" => $homeWifiLat9,
            "homeWifiLng9" => $homeWifiLng9,
            "homeWifiMac10" => $homeWifiMac10,
            "homeWifiDescr10" => $homeWifiDescr10,
            "homeWifiLat10" => $homeWifiLat10,
            "homeWifiLng10" => $homeWifiLng10
          ],
          "contactNumbers" => $configContactNamesArray,
          "relativeNumbers" => $relativeNumbersArray,
          "sosOption" => [
            "holdTime" => 600,
            "ringsTime" => 60,
            "cycles" => 1
          ],
          "workingMode" => [
            "mode" => 6,
            "timeInterval" => null
          ]
        ]),
        "forUserId" => $_SESSION['id']
      ]);
      
        /*

      if (!empty($_POST['homeBeaconMac']) AND !empty($_POST['homeBeaconLat']) AND !empty($_POST['homeBeaconLng']) AND !empty($_POST['homeBeaconDescr'])) {
        sendConfigCommandHomeBeaconSet($data[0]['msisdn'], $data[0]['homeBeaconMac'], $data[0]['homeBeaconLat'], $data[0]['homeBeaconLng'], $data[0]['homeBeaconDescr'],$imei,$taskId);
      }

      */

      //sendConfigCommandServerIP($data[0]['msisdn'], $data[0]['imei'], $taskId);
    }

  } else {
      echo '{"msisdn": "'.$data[0]['msisdn'].'", "status": "error", "simUpdateStatus": "error", "simUpdateError": "empty umoDeviceId"}';
  }

}


if (isset($_GET['action']) AND $_GET['action'] === "saveSubmitAdvanced" AND isset($_GET['imei'])) {

  $imei = $_GET['imei'];
  $query = "SELECT d.*, o.name as orgName FROM devices d LEFT JOIN organisations o ON d.organisationId = o.id WHERE d.organisationId IN (SELECT id FROM organisations WHERE id = :orgId OR parentOrganisationId = :orgId) AND d.imei = :imei";
  $data = $database->query($query, [":orgId" => $orgId, ":imei" => $imei])->fetchAll();
  if (count($data) !== 1) {
    echo '{"imei": "'.$imei.'", "status": "error", "message": "unauthorized / device not found!"}';
    exit();
  }

  if (!empty($_POST['umoDeviceIdInput'])) {

    $organisationId = $data[0]['organisationId'];
    $imei = $_GET['imei'];

    $preAlarmAbort = false;
    if (isset($_POST['enablePreAlarmAbort'])) { $preAlarmAbort = true; }

    $enableFallDownAlert = false;
    if (isset($_POST['enableFallDownAlert'])) { $enableFallDownAlert = true; }

    $assignDevice = $database->update("devices", [
      "watchSettings_preAlarmAbort" => $preAlarmAbort,
      "watchSettings_speakerVolume" => $_POST['speakerVolume'],
      "watchSettings_fallDownAlert" => $enableFallDownAlert,
      "watchSettings_fallDownAlertSensitivity" => $_POST['fallDownSensitivity'],
      "watchSettings_watchFaceSelection" => $_POST['selectWatchFace'],
    ], [ "imei" => $imei]);

      $timestamp = time();
      $taskId = md5($timestamp);

      $taskIdDelete = md5($timestamp)."_1.5";

      $taskIdTwo = $taskId."_2";

      $data = $database->select("devices", "*",
      [ "imei" => $imei]
      );

    //print_r($assignDevice);

    $insertAssignQueueError = $database->error;

    //print_r($assignDevice);

    if ($insertAssignQueueError !== null) {
      echo "{\"status\":\"error\"}";
    } else {

      $orgData = $database->select("organisations", "*",
      [ "id" => $organisationId ]
      );
  
        $setNumberNamesQuery = $database->insert("taskQueue", [
        "packetType" => "multi_transmitAdvancedConfig",
          "sequenceId" => random_int(1,9999),
          "lastModificationTimestamp" => $timestamp,
          "initiatedTimestamp" => $timestamp,
          "status" => 0,
          "taskId" => $taskId,
          //"runWithDelay" => 120,
          "imei" => $data[0]['imei'],
          "simPlatformId" => $data[0]['simPlatformId'],
          "deviceType" => $data[0]['hardwareDeviceType'],
          "msisdn" => $data[0]['msisdn'],
          "packetBodyJson" => json_encode(
            [ "watchSettings" => [
              "preAlarmAbort" => $data[0]['watchSettings_preAlarmAbort'],
              "speakerVolume" => $data[0]['watchSettings_speakerVolume'],
              "fallDownAlert" => $data[0]['watchSettings_fallDownAlert'],
              "fallDownAlertSensitivity" => $data[0]['watchSettings_fallDownAlertSensitivity'],
              "watchFaceSelection" => $data[0]['watchSettings_watchFaceSelection']
            ]
          ]),
        "forUserId" => $_SESSION['id']
      ]);

      echo '{"msisdn": "'.$data[0]['msisdn'].'", "status": "done"}';
      
        /*

      if (!empty($_POST['homeBeaconMac']) AND !empty($_POST['homeBeaconLat']) AND !empty($_POST['homeBeaconLng']) AND !empty($_POST['homeBeaconDescr'])) {
        sendConfigCommandHomeBeaconSet($data[0]['msisdn'], $data[0]['homeBeaconMac'], $data[0]['homeBeaconLat'], $data[0]['homeBeaconLng'], $data[0]['homeBeaconDescr'],$imei,$taskId);
      }

      */

      //sendConfigCommandServerIP($data[0]['msisdn'], $data[0]['imei'], $taskId);
    }

  } else {
      echo '{"msisdn": "'.$data[0]['msisdn'].'", "status": "error", "simUpdateStatus": "error", "simUpdateError": "empty umoDeviceId"}';
  }

}

if (isset($_GET['action']) AND $_GET['action'] === "saveAdvancedData" AND isset($_GET['imei'])) {

  $imei = $_GET['imei'];
  $query = "SELECT d.*, o.name as orgName FROM devices d LEFT JOIN organisations o ON d.organisationId = o.id WHERE d.organisationId IN (SELECT id FROM organisations WHERE id = :orgId OR parentOrganisationId = :orgId) AND d.imei = :imei";
  $data = $database->query($query, [":orgId" => $orgId, ":imei" => $imei])->fetchAll();
  if (count($data) !== 1) {
    echo '{"imei": "'.$imei.'", "status": "error", "message": "unauthorized / device not found!"}';
    exit();
  }

  if (!empty($_POST['umoDeviceIdInput'])) {

    $organisationId = $data[0]['organisationId'];
    $imei = $_GET['imei'];

    $preAlarmAbort = 0;
    if (isset($_POST['enablePreAlarmAbort'])) { $preAlarmAbort = 1; }

    $enableFallDownAlert = 0;
    if (isset($_POST['enableFallDownAlert'])) { $enableFallDownAlert = 1; }

    $assignDevice = $database->update("devices", [
      "watchSettings_preAlarmAbort" => $preAlarmAbort,
      "watchSettings_speakerVolume" => $_POST['speakerVolume'],
      "watchSettings_fallDownAlert" => $enableFallDownAlert,
      "watchSettings_fallDownAlertSensitivity" => $_POST['fallDownSensitivity'],
      "watchSettings_watchFaceSelection" => $_POST['selectWatchFace'],
    ], [ "imei" => $imei]);

    //print_r($assignDevice);

    $insertAssignQueueError = $database->error;

    //print_r($assignDevice);

    if ($insertAssignQueueError !== null) {
      echo '{"msisdn": "'.$data[0]['msisdn'].'", "status": "error"}';
    } else {
      echo '{"msisdn": "'.$data[0]['msisdn'].'", "status": "done"}';
    }

  } else {
      echo '{"msisdn": "'.$data[0]['msisdn'].'", "status": "error", "simUpdateStatus": "error", "simUpdateError": "empty umoDeviceId"}';
  }

}


if (isset($_GET['action']) AND $_GET['action'] === "homeWifiUpdate" AND isset($_POST['umoDeviceIdInput']) AND isset($_GET['imei'])) {

  $imei = $_GET['imei'];
  $query = "SELECT d.*, o.name as orgName FROM devices d LEFT JOIN organisations o ON d.organisationId = o.id WHERE d.organisationId IN (SELECT id FROM organisations WHERE id = :orgId OR parentOrganisationId = :orgId) AND d.imei = :imei";
  $data = $database->query($query, [":orgId" => $orgId, ":imei" => $imei])->fetchAll();
  if (count($data) !== 1) {
    echo '{"imei": "'.$imei.'", "status": "error", "message": "unauthorized / device not found!"}';
    exit();
  }

  $homeWifiInstances = [];

  $orgId = $data[0]['organisationId'];

  // Collect all complete instances
  for ($i = 1; $i <= 10; $i++) {
      if (!empty($_POST["homeWifiMac$i"]) && !empty($_POST["homeWifiLat$i"]) && !empty($_POST["homeWifiLng$i"])) {
          $instance = [
              'mac' => $_POST["homeWifiMac$i"],
              'lat' => $_POST["homeWifiLat$i"],
              'lng' => $_POST["homeWifiLng$i"],
              'descr' => !empty($_POST["homeWifiDescr$i"]) ? str_replace(' ', '_', $_POST["homeWifiDescr$i"]) : "leer",
              'longName' => isset($_POST["homeWifiLongName$i"]) ? $_POST["homeWifiLongName$i"] : ""
          ];
          $homeWifiInstances[] = $instance;
      }
  }

    // Set the variables from the $homeWifiInstances array
    for ($i = 1; $i <= 10; $i++) {
      if (isset($homeWifiInstances[$i - 1])) {
          if (validateCoordinates($homeWifiInstances[$i - 1]['lat'], $homeWifiInstances[$i - 1]['lng'])) {
            ${"homeWifiMac$i"} = $homeWifiInstances[$i - 1]['mac'];
            ${"homeWifiLat$i"} = $homeWifiInstances[$i - 1]['lat'];
            ${"homeWifiLng$i"} = $homeWifiInstances[$i - 1]['lng'];
            ${"homeWifiDescr$i"} = $homeWifiInstances[$i - 1]['descr'];
            ${"homeWifiLongName$i"} = $homeWifiInstances[$i - 1]['longName'];
          } else {
            echo '{"msisdn": "'.$data[0]['msisdn'].'", "status": "error", "homeWifiUpdateStatus": "error"}';
            return;
          }
      } else {
          ${"homeWifiMac$i"} = "";
          ${"homeWifiLat$i"} = "";
          ${"homeWifiLng$i"} = "";
          ${"homeWifiDescr$i"} = "";
          ${"homeWifiLongName$i"} = "";
      }
  }

 
  $organisationId = $orgId;
  $imei = $_GET['imei'];

  $updateHomeWifi = $database->update("devices", [
    "homeWifiMac1" => $homeWifiMac1,
    "homeWifiDescr1" => $homeWifiDescr1,
    "homeWifiLat1" => $homeWifiLat1,
    "homeWifiLng1" => $homeWifiLng1,
    "homeWifiLongName1" => $homeWifiLongName1,
    "homeWifiMac2" => $homeWifiMac2,
    "homeWifiDescr2" => $homeWifiDescr2,
    "homeWifiLat2" => $homeWifiLat2,
    "homeWifiLng2" => $homeWifiLng2,
    "homeWifiLongName2" => $homeWifiLongName2,
    "homeWifiMac3" => $homeWifiMac3,
    "homeWifiDescr3" => $homeWifiDescr3,
    "homeWifiLat3" => $homeWifiLat3,
    "homeWifiLng3" => $homeWifiLng3,
    "homeWifiLongName3" => $homeWifiLongName3,
    "homeWifiMac4" => $homeWifiMac4,
    "homeWifiDescr4" => $homeWifiDescr4,
    "homeWifiLat4" => $homeWifiLat4,
    "homeWifiLng4" => $homeWifiLng4,
    "homeWifiLongName4" => $homeWifiLongName4,
    "homeWifiMac5" => $homeWifiMac5,
    "homeWifiDescr5" => $homeWifiDescr5,
    "homeWifiLat5" => $homeWifiLat5,
    "homeWifiLng5" => $homeWifiLng5,
    "homeWifiLongName5" => $homeWifiLongName5,
    "homeWifiMac6" => $homeWifiMac6,
    "homeWifiDescr6" => $homeWifiDescr6,
    "homeWifiLat6" => $homeWifiLat6,
    "homeWifiLng6" => $homeWifiLng6,
    "homeWifiLongName6" => $homeWifiLongName6,
    "homeWifiMac7" => $homeWifiMac7,
    "homeWifiDescr7" => $homeWifiDescr7,
    "homeWifiLat7" => $homeWifiLat7,
    "homeWifiLng7" => $homeWifiLng7,
    "homeWifiLongName7" => $homeWifiLongName7,
    "homeWifiMac8" => $homeWifiMac8,
    "homeWifiDescr8" => $homeWifiDescr8,
    "homeWifiLat8" => $homeWifiLat8,
    "homeWifiLng8" => $homeWifiLng8,
    "homeWifiLongName8" => $homeWifiLongName8,
    "homeWifiMac9" => $homeWifiMac9,
    "homeWifiDescr9" => $homeWifiDescr9,
    "homeWifiLat9" => $homeWifiLat9,
    "homeWifiLng9" => $homeWifiLng9,
    "homeWifiLongName9" => $homeWifiLongName9,
    "homeWifiMac10" => $homeWifiMac10,
    "homeWifiDescr10" => $homeWifiDescr10,
    "homeWifiLat10" => $homeWifiLat10,
    "homeWifiLng10" => $homeWifiLng10,
    "homeWifiLongName10" => $homeWifiLongName10
  ], [ "imei" => $imei,
    "organisationId" => $orgId ]);

  $timestamp = time();
  $taskId = md5($timestamp);

    $data = $database->select("devices", "*",
  [ "imei" => $imei,
    "organisationId" => $orgId ]
  );

  $insertHomeWifi = $database->insert("taskQueue", [
    "packetType" => "updateHomeWifi",
    "sequenceId" => random_int(1,9999),
    "lastModificationTimestamp" => $timestamp,
    "initiatedTimestamp" => $timestamp,
    "status" => 0,
    "taskId" => $taskId,
    "imei" => $data[0]['imei'],
    "simPlatformId" => $data[0]['simPlatformId'],
    "msisdn" => $data[0]['msisdn'],
    "forUserId" => $_SESSION['id'],
    "packetBodyJson" => json_encode([
      "homeWifiMac1" => $homeWifiMac1,
      "homeWifiDescr1" => $homeWifiDescr1,
      "homeWifiLat1" => $homeWifiLat1,
      "homeWifiLng1" => $homeWifiLng1,
      "homeWifiMac2" => $homeWifiMac2,
      "homeWifiDescr2" => $homeWifiDescr2,
      "homeWifiLat2" => $homeWifiLat2,
      "homeWifiLng2" => $homeWifiLng2,
      "homeWifiMac3" => $homeWifiMac3,
      "homeWifiDescr3" => $homeWifiDescr3,
      "homeWifiLat3" => $homeWifiLat3,
      "homeWifiLng3" => $homeWifiLng3,
      "homeWifiMac4" => $homeWifiMac4,
      "homeWifiDescr4" => $homeWifiDescr4,
      "homeWifiLat4" => $homeWifiLat4,
      "homeWifiLng4" => $homeWifiLng4,
      "homeWifiMac5" => $homeWifiMac5,
      "homeWifiDescr5" => $homeWifiDescr5,
      "homeWifiLat5" => $homeWifiLat5,
      "homeWifiLng5" => $homeWifiLng5,
      "homeWifiMac6" => $homeWifiMac6,
      "homeWifiDescr6" => $homeWifiDescr6,
      "homeWifiLat6" => $homeWifiLat6,
      "homeWifiLng6" => $homeWifiLng6,
      "homeWifiMac7" => $homeWifiMac7,
      "homeWifiDescr7" => $homeWifiDescr7,
      "homeWifiLat7" => $homeWifiLat7,
      "homeWifiLng7" => $homeWifiLng7,
      "homeWifiMac8" => $homeWifiMac8,
      "homeWifiDescr8" => $homeWifiDescr8,
      "homeWifiLat8" => $homeWifiLat8,
      "homeWifiLng8" => $homeWifiLng8,
      "homeWifiMac9" => $homeWifiMac9,
      "homeWifiDescr9" => $homeWifiDescr9,
      "homeWifiLat9" => $homeWifiLat9,
      "homeWifiLng9" => $homeWifiLng9,
      "homeWifiMac10" => $homeWifiMac10,
      "homeWifiDescr10" => $homeWifiDescr10,
      "homeWifiLat10" => $homeWifiLat10,
      "homeWifiLng10" => $homeWifiLng10
    ])
  ]);

  if ($insertHomeWifi) {
    echo '{"msisdn": "'.$data[0]['msisdn'].'", "status": "done", "homeWifiUpdateStatus": "done"}';
  } else {
    echo "{\"status\":\"error\", \"message\":\""+ $database->error +"\"}";
  }

/*
$data = $database->update("devices", [
  "organisationId" => $orgId,
  "active" => 2,
  "umoDeviceId" => $umoDeviceId
], [ "imei" => $imei ]);

if ($data->rowCount() > 0) {
  echo "{\"status\":\"done\"}";
} else {
  echo "{\"status\":\"done\"}";
}
*/

}


if (isset($_GET['action']) AND $_GET['action'] === "rebootDevice" AND isset($_GET['imei'])) {
  $imei = $_GET['imei'];
  $query = "SELECT d.*, o.name as orgName FROM devices d LEFT JOIN organisations o ON d.organisationId = o.id WHERE d.organisationId IN (SELECT id FROM organisations WHERE id = :orgId OR parentOrganisationId = :orgId) AND d.imei = :imei";
  $data = $database->query($query, [":orgId" => $orgId, ":imei" => $imei])->fetchAll();

  if (count($data) > 0) {

      $timestamp = time();
      $taskId = md5($timestamp);

      $insertHomeWifi = $database->insert("taskQueue", [
        "packetType" => "rebootDevice",
        "sequenceId" => random_int(1,9999),
        "lastModificationTimestamp" => $timestamp,
        "initiatedTimestamp" => $timestamp,
        "status" => 0,
        "taskId" => $taskId,
        "imei" => $data[0]['imei'],
        "simPlatformId" => $data[0]['simPlatformId'],
        "msisdn" => $data[0]['msisdn'],
        "forUserId" => $_SESSION['id'],
        "deviceType" => $data[0]['hardwareDeviceType'],
        "packetBodyJson" => ""
      ]);

      echo "{\"status\":\"done\", \"response\":\"$command\"}";
  } else {
    echo "{\"msisdn\":\"".$data[0]['msisdn']."\", \"status\":\"error\"}";
  }
}



if (isset($_GET['action']) AND $_GET['action'] === "baseStationTransmit" AND isset($_GET['imei'])) {

  $imei = $_GET['imei'];
  $query = "SELECT d.*, o.name as orgName FROM devices d LEFT JOIN organisations o ON d.organisationId = o.id WHERE d.organisationId IN (SELECT id FROM organisations WHERE id = :orgId OR parentOrganisationId = :orgId) AND d.imei = :imei";
  $data = $database->query($query, [":orgId" => $orgId, ":imei" => $imei])->fetchAll();
  if (count($data) !== 1) {
    echo '{"imei": "'.$imei.'", "status": "error", "message": "unauthorized / device not found!"}';
    exit();
  }

   if (isset($_POST['baseStationLat']) AND !empty($_POST['baseStationLat']) AND isset($_POST['baseStationLng']) AND !empty($_POST['baseStationLng'])) {
    $dataOrganisationId = $data[0]['organisationId'];
    $imei = $_GET['imei'];

    $query = "UPDATE devices SET baseStationLat=:baseStationLat, baseStationLng=:baseStationLng WHERE imei=:imei";
    $assignDevice = $database->query($query, [
        ":baseStationLat" => $_POST['baseStationLat'],
        ":baseStationLng" => $_POST['baseStationLng'],
        ":imei" => $imei
        ]);

    $assignDeviceError = $database->error;

    $taskId = md5(time());

    if ($assignDeviceError !== null) {
      echo '{"msisdn": "'.$data[0]['msisdn'].'", "status": "error", "taskId": "'.$taskId.'", "hardwareDeviceType": "'.$data[0]['hardwareDeviceType'].'"}';
    }

    $sendBaseStationCmd = sendConfigCommandBaseStationSet($data[0]['msisdn'], $_POST['baseStationLat'], $_POST['baseStationLng'], $data[0]['imei'], $taskId);
    if (is_array($sendBaseStationCmd["ids"])) {
      $insertAssignQueue = $database->insert("queueAssign", [
        "type" => "baseStationTransmit",
        "time" => time(),
        "status" => 0,
        "taskId" => $taskId,
        "msisdn" => $data[0]['msisdn'],
        "imei" => $data[0]['imei'],
        "assignParameters" => json_encode([
          "baseStationLat" => $_POST['baseStationLat'],
          "baseStationLng" => $_POST['baseStationLng']
        ])
      ]);
      $insertAssignQueueError = $database->error;

      echo '{"msisdn": "'.$data[0]['msisdn'].'", "status": "done", "taskId": "'.$taskId.'", "hardwareDeviceType": "'.$data[0]['hardwareDeviceType'].'"}';
    } else {
      echo '{"msisdn": "'.$data[0]['msisdn'].'", "status": "error", "taskId": "'.$taskId.'", "hardwareDeviceType": "'.$data[0]['hardwareDeviceType'].'"}';
    }

    } else {
      echo json_encode(array("error" => "not all parameters set!"));
    }

/*
  $data = $database->update("devices", [
    "organisationId" => $orgId,
    "active" => 2,
    "umoDeviceId" => $umoDeviceId
  ], [ "imei" => $imei ]);

  if ($data->rowCount() > 0) {
    echo "{\"status\":\"done\"}";
  } else {
    echo "{\"status\":\"done\"}";
  }
  */

}

  if (isset($_GET['action']) AND $_GET['action'] === "baseStationTransmitStatus" AND isset($_GET['taskId'])) {
    $data = $database->select("queueAssign", "*",
    [ "taskId" => $_GET['taskId'] ]
    );

    if (count($data) > 0 AND didAllSmsTasksSucceed($database,$_GET['taskId'])) {

      $device = $database->select("devices", "*",
      [ "imei" => $data[0]['imei'] ]
      );

      if (count($device) == 1) {
        $updateTask = $database->update("queueAssign", [
          "status" => 1
        ], [ "taskId" => $_GET['taskId'] ]);

        if (!empty($device[0]['hardwareDeviceType']) AND $device[0]['hardwareDeviceType'] == "EV07") {
          echo '{"msisdn": "'.$data[0]['msisdn'].'", "status": "done", "taskId": "'.$_GET['taskId'].'", "messageColor": "green", "message": "Jetzt BStation bestät.!", "hardwareDeviceType": "'.$device[0]['hardwareDeviceType'].'"}';
        } else {
          echo '{"msisdn": "'.$data[0]['msisdn'].'", "status": "done", "taskId": "'.$_GET['taskId'].'", "hardwareDeviceType": "'.$device[0]['hardwareDeviceType'].'"}';
        }
      }
    } else {
      if (didOneSmsTaskFail($database, $_GET['taskId'])) {
        echo '{"msisdn": "'.$data[0]['msisdn'].'", "status": "error", "taskId": "'.$_GET['taskId'].'"}';
      } else {
        echo '{"msisdn": "'.$data[0]['msisdn'].'", "status": "undone", "taskId": "'.$_GET['taskId'].'"}';
      }
    }

  }

?>