<?php
    include "../configLive.php";

    include "../ServerSelectionLive.php";
    include '../GTSDistanceCalculation.php';
    //error_log("test");
    date_default_timezone_set('Asia/Kolkata');
    error_reporting(0);
    $accountID='';
    $deviceID='';
    $caseID='';
    $hospitalID='';
    $user='';
    $password='';
    $user=$_POST['user'];
    $password=$_POST['password'];
    $response='';
    $radious=1000;
    $jsonresponse='';
    error_log("=====================Change Base  ID:".$_POST['deviceID']." Arrived==");
    if($user==$apiusername && $password==$apipassword){
        $accountID=$_POST['accountID'];
        $deviceID=strtolower($_POST['deviceID']);
        $caseID=$_POST['caseID'];
        $backBaseLat=$_POST['backBaseLat'];
        $backBaseLng=$_POST['backBaseLng'];
       $baseETA=($_POST['baseEta']=="")?0:$_POST['baseEta'];

        if($deviceID!="" && $caseID!='' && $backBaseLat!='' && $backBaseLng!=""){

              try {
                  $tacconnect = mysqli_connect($LiveEventDBserver, $tacusername, $tacpassword) or die ("Unable to connect to the database : " . mysqli_error($tacconnect));
                  mysqli_select_db($tacconnect,$tacdb);
                  $myqry="SELECT * FROM caseManagerNew WHERE deviceID='$deviceID' and caseID='$caseID'"; 
                  $result = mysqli_query($tacconnect,$myqry) or die(mysqli_error($tacconnect));;

                  $caseTime=0;
                  $caseType="";
                  $caseStatus="";
                  while ($row = mysqli_fetch_assoc($result)) {
                     $caseTime=$row['caseTimestamp'];
                     $caseType=$row['caseType'];
                     $caseStatus=$row['caseStatus'];
                  }
                  $difftime=abs(time()-$caseTime);

                  $num_rows = mysqli_num_rows($result);
                  if($num_rows>0){

                      $insert="insert into CaseChangeHospitalAndBaseLogs (caseID,type,lat,lng,updatedTime) values('$caseID','backtobase','$backBaseLat','$backBaseLng',".time().")";
                       mysqli_query($tacconnect, $insert) or die(mysqli_error($tacconnect));

                       $updateQry="update caseManagerNew set backtobaselatlng='".$backBaseLat."/".$backBaseLng."' ,backbaseETA='$baseETA'  where accountID='$accountID' and deviceID='$deviceID' and caseID='$caseID'";
                       mysqli_query($tacconnect,$updateQry) or die(mysqli_error($tacconnect));
                        $geozoneID=strtolower($caseID."_".$deviceID."_be");
                        $displayname="Back To Base";
                       if($difftime<43200 && $caseType=="ift"){
                             createZone($accountID,$geozoneID,$radious,$backBaseLat,$backBaseLng,$displayname);
                             //error_log("=====================Change Base  ID:".$_POST['caseID']." Case Assign ".date('d-m-Y H:i:s',$caseTime)." Diff:".$difftime."  Created ".$caseType." ".$caseStatus);
                        }else if($difftime<43200 && $caseType=="emergency"){
                             createZone($accountID,$geozoneID,$radious,$backBaseLat,$backBaseLng,$displayname);
                             //error_log("=====================Change Base  ID:".$_POST['caseID']." Case Assign ".date('d-m-Y H:i:s',$caseTime)." Diff:".$difftime."  Created ".$caseType." ".$caseStatus);
                        }else{
                            // error_log("=====================Change Base  ID:".$_POST['caseID']." Case Assign ".date('d-m-Y H:i:s',$caseTime)." Diff:".$difftime."  Rejected ".$caseType."  ".$caseStatus);
                        }

                       $jsonresponse= '{"Status":"success","msg":"Base Changed Changed"}';

                  }else{
                      error_log("CaseID Does not existed");
                      $jsonresponse= '{"Status":"Fail:CaseID Does not existed '.$deviceID.'-'.$caseID.'","ReceivedTime":"'.date('d-M-Y h:i:s a',time()).'"}';
                      saveRequest($accountID,$deviceID,0,0,0,time(),'Fail:CaseID Does not existed '.$deviceID.'-'.$caseID,'New Case Arrived');
                  }
                   mysqli_close($tacconnect);
              }catch (Exception $e) {
                  $jsonresponse= '{"status":"Please Try later","ReceivedTime":"'.date('d-M-Y h:i:s a',time()).'"}';
                  saveRequest($accountID,$deviceID,0,0,0,time(),'Fail:Please Try later '.$deviceID.'-'.$caseID,'New Case Arrived');
              }
          }else{
              if($deviceID==""){
                  $jsonresponse= '{"Status":"Invalid records DeviceID is null","ReceivedTime":"'.date('d-M-Y h:i:s a',time()).'"}';
                  saveRequest($accountID,$deviceID,0,0,0,time(),'Fail:Invalid  DeviceID in '.$deviceID.'-'.$caseID,'New Case Arrived');
              }else if($caseID==''){
                  $jsonresponse= '{"Status":"Invalid records CaseID is null","ReceivedTime":"'.date('d-M-Y h:i:s a',time()).'"}';
                   saveRequest($accountID,$deviceID,0,0,0,time(),'Fail:Invalid records caseID in '.$deviceID.'-'.$caseID,'New Case Arrived');
              }else if($hospitalID==''){
                  $jsonresponse= '{"Status":"Invalid Base is null","ReceivedTime":"'.date('d-M-Y h:i:s a',time()).'"}';
                   saveRequest($accountID,$deviceID,0,0,0,time(),'Fail:Invalid Lat in '.$deviceID.'-'.$caseID,'New Case Arrived');
              }
          }
      }else{
          $jsonresponse='{"Status":"Invalid login Details","ReceivedTime":"'.date('d-M-Y h:i:s a',time()).'"}';
           saveRequest($accountID,$deviceID,0,0,0,time(),'Invalid login Details','New Case Arrived');
      }
      header('Content-Type: application/json');
      echo $jsonresponse;

      error_log("Hospital Changed End");

  
    function utf8_to_unicode($str) {
$unicode = array();
$values = array();
$lookingFor = 1;
for ($i = 0; $i < strlen($str); $i++) {
    $thisValue = ord($str[$i]);
    if ($thisValue < 128) {
        $number = dechex($thisValue);
        $unicode[] = (strlen($number) == 1) ? '%u000' . $number : "%u00" . $number;
    } else {
        if (count($values) == 0)
            $lookingFor = ( $thisValue < 224 ) ? 2 : 3;
        $values[] = $thisValue;
        if (count($values) == $lookingFor) {
            $number = ( $lookingFor == 3 ) ?
                    ( ( $values[0] % 16 ) * 4096 ) + ( ( $values[1] % 64 ) * 64 ) + ( $values[2] % 64 ) :
                    ( ( $values[0] % 32 ) * 64 ) + ( $values[1] % 64
                    );
            $number = dechex($number);
            $unicode[] =
                    (strlen($number) == 3) ? "%u0" . $number : "%u" . $number;
            $values = array();
            $lookingFor = 1;
        } // if
    } // if
}
return implode("", $unicode);
}




 function createZone($accountID,$geozoneid,$radious,$lat,$lng,$displayname) {
          global $tacserver, $gtsusername, $gtspassword,$gtsdb,$LiveEventDBserver,$LiveGTS;
          $gtsconnect = mysqli_connect($LiveGTS,$gtsusername,$gtspassword) or die ("Unable to connect to the database1 : " . mysqli_error($gtsconnect));
          mysqli_select_db($gtsconnect, $gtsdb);
          $lat=floatval($lat);
          $lng=floatval($lng);

          //delete existing hospital
           $deleteqry="delete from Geozone where accountID='$accountID' and geozoneID='$geozoneid'";
           mysqli_query($gtsconnect,$deleteqry) or die(mysqli_error($gtsconnect));
          $distance=$radious/1000;//meters into Km
          //calculate min lat,lng and max lat,lng
          $R = 6371; //constant earth radius. You can add precision here if you wish
          $maxLat = $lat + rad2deg($distance/$R);
          $minLat = $lat - rad2deg($distance/$R);
          $maxLng = $lng + rad2deg(asin($distance/$R) / cos(deg2rad($lat)));
          $minLng = $lng - rad2deg(asin($distance/$R) / cos(deg2rad($lat)));
          $time=time();
          $insertzone="INSERT into Geozone(accountID,geozoneID,reverseGeocode,arrivalZone,departureZone,shapeColor,zoneType,radius,latitude1,longitude1,arrivalStatusCode,departureStatusCode,isActive,creationTime,displayName,description,minLatitude,maxLatitude,minLongitude,maxLongitude,sortID,zonePurposeID,autoNotify,zoomRegion,latitude2,latitude3,latitude4,latitude5,latitude6,latitude7,latitude8,latitude9,latitude10,longitude2,longitude3,longitude4,longitude5,longitude6,longitude7,longitude8,longitude9,longitude10,clientUpload,clientID,iconName,lastUpdateTime,priority,speedLimitKPH,groupID,streetAddress, city, stateProvince, postalCode, country, subdivision) values ('$accountID','$geozoneid','0','1','1','#ffa500','0','$radious','$lat','$lng','61968','62000','1','$time','$displayname','$displayname','$minLat','$maxLat','$minLng','$maxLng',0,'',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,'black','$time',0,0,'','','','','','','')";


         //echo $insertzone;
          //error_log($insertzone);
          mysqli_query($gtsconnect,$insertzone) or die(mysqli_error($gtsconnect));
          //delete 24 hours old scene 
          mysqli_close($gtsconnect);
     }

?>
