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

    include "../ServerSelection.php";
    //error_log("test");
    date_default_timezone_set('Asia/Kolkata');
    error_reporting(0);
    $accountID='';
    $deviceID='';
    $caseID='';
    $incidentLatitude='';
    $incidentLongitude='';
    $caseTimestamp='';
    $caseType='';
    $caseStatus='';
    $callerName='';
    $callerContact='';
    $formate='';
    $user='';
    $password='';
    $formate=$_POST['formate'];
    $user=$_POST['user'];
    $password=$_POST['password'];
    $response='';
    $jsonresponse='';
    error_log("New Case ID:".$_POST['caseID']." Arrived");
    //error_log($user."-".$password."-".$formate."-saicase1");
    if($user==$apiusername && $password==$apipassword){
        $accountID=$_POST['accountID'];
        $deviceID=$_POST['deviceID'];
        $caseID=$_POST['caseID'];
       // $incidentLatitude=$_POST['inlat'];
       // $incidentLongitude=$_POST['inlng'];
       // $caseTimestamp=$_POST['caseTimestamp'];
        //echo "timest".$caseTimestamp."  ".$caseID;
        $caseType=$_POST['caseType'];
        $caseStatus="assigned";
        $callerName=$_POST['callerName'];
        $callerContact=$_POST['callerContact'];



        //error_log("Time :".$_POST['caseTimestamp']);
        $caseTimestamp =strtotime($_POST['caseTimestamp']) ;//$_POST['assignedTime'];
        //$toDate = $_POST['tripEndTime'];
        $incidentLatitude=$_POST['inlat']==""?0.0:$_POST['inlat'];//sourceLatitude
        $incidentLongitude=$_POST['inlng']==""?0.0:$_POST['inlng'];//sourceLongitude
        $destLat1=$_POST['destinationLatitude1']==""?0.0:$_POST['destinationLatitude1'];
        $destLng1=$_POST['destinationLongitude1']==""?0.0:$_POST['destinationLongitude1'];
        $destLat2=$_POST['destinationLatitude2']==""?0.0:$_POST['destinationLatitude2'];
        $destLng2=$_POST['destinationLongitude2']==""?0.0:$_POST['destinationLongitude2'];
        $destLat3=$_POST['destinationLatitude3']==""?0.0:$_POST['destinationLatitude3'];
        $destLng3=$_POST['destinationLongitude3']==""?0.0:$_POST['destinationLongitude3'];
        $backLat=$_POST['baseLatitude']==""?0.0:$_POST['baseLatitude'];
        $backLng=$_POST['baseLongitude']==""?0.0:$_POST['baseLongitude'];
        $sourceDistrict=$_POST['sourceDistrict'];
        $sourceType=$_POST['sourceType'];
        $destinationType=$_POST['destinationType'];
        $destinationDistrict=$_POST['destinationDistrict'];
        $hospitalID=$_POST['hospitalID1'];
        $hospitalID2=$_POST['hospitalID2'];
        $sceneEta=isset($_POST['baseToSourceEta'])?$_POST['baseToSourceEta']:0;
        $hospitalEta=isset($_POST['sourceToHospitalEta'])?$_POST['sourceToHospitalEta']:0;
      //  error_log("timest".$caseTimestamp." Id: ".$caseID." Device: ".$deviceID."  Time".$caseTimestamp."  lng :".$incidentLongitude." lat".$incidentLatitude);
        insertIntoDevice($accountID,$deviceID,$caseID);//update case cased ID in Device Table Column smsEmail   

        if($deviceID!="" && $caseID!='' && $incidentLatitude!='' && $incidentLongitude!='' && $caseTimestamp!=''){
              $caseStartTime=0;
              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 caseManager WHERE deviceID='$deviceID' and caseID='$caseID'"; 
                    
                  $result = mysqli_query($tacconnect,$myqry) or die(mysqli_error($tacconnect));;
                  $num_rows = mysqli_num_rows($result);
                  if($num_rows==0){
                      //Close Previous Cases
                      updateCaseStatus($deviceID);
                      $caseTimestamp=$caseTimestamp; 
                      $caseType=str_replace("'"," ",$caseType);
                      $callerName=str_replace("'"," ",$callerName); 

                  //track server support https
                  $caseurl1="https://upemri.glovision.co/track/?cid=";
                  $caseurl2=$caseID."&acc=".$accountID;
                  $resurl=$caseurl1.$caseurl2;
                  //$caseurl2=$caseID."&ctime=".$caseTimestamp."&ctype=".$caseType."&cc=".$callerContact."&did=".$deviceID."&acc=".$accountID;
                  $search= array(" ", "-", "/","#","//","&");
                  $replace= array("%20", "%2D", "%2F","%23","%2F","%26");
                  $caseurl3= str_replace($search, $replace, $caseurl2);
                  $caseurl=$caseurl1.$caseurl3;
                  //$caseType=="referral";
                  $time=time();
                  $caseupdate="INSERT INTO caseManager (accountID,deviceID,caseID,incidentLatitude,incidentLongitude,caseTimestamp,caseType,caseStatus,caseDistance, callerName,callerContact,url,caseCloseTime,caseVehicleStatus,vehicleStatus,sourceDistrict,sourceType,destinationLatitude1,destinationLongitude1,destinationLatitude2,destinationLongitude2,destinationLatitude3,destinationLongitude3,baseLatitude,baseLongitude,destinationDistrict,destinationType,creationTime,hospitalID1,baseToSourceEta,sourceToHospitalEta,hospitalID) VALUES ('$accountID','$deviceID','$caseID','$incidentLatitude','$incidentLongitude','$caseTimestamp','$caseType','$caseStatus','0','$callerName','$callerContact','$caseurl','0','','','$sourceDistrict','$sourceType','$destLat1','$destLng1','$destLat2','$destLng2','$destLat3','$destLng3','$backLat','$backLng','$destinationDistrict','$destinationType','$time','$hospitalID2','$sceneEta','$hospitalEta','$hospitalID')";

                  $qry1 = mysqli_query($tacconnect,$caseupdate) or die(mysqli_error($tacconnect));
                  mysqli_close($tacconnect); 
                  $jsonresponse= '{"Status":"success","ReceivedTime":"'.date('d-M-Y h:i:s a',time()).'"}';
                  $callerName=str_replace(" ","%20",$callerName); 

                   /*
                        get Vehicle Live Location to Estimated distance
                   */ 
                   $gtsconnect = mysqli_connect($LiveEventDBserver,$gtsusername,$gtspassword) or die ("Unable to connect to the database1 : " . mysqli_error($gtsconnect));
                   mysqli_select_db($gtsconnect, $gtsdb);
                   $qry ="SELECT a.lastValidLatitude as lastValidLatitude,a.lastValidLongitude as lastValidLongitude,a.lastEventTimestamp as lastEventTimestamp,b.contactPhone as crewNumber FROM Device a,Driver b WHERE a.deviceID=b.driverID and a.deviceID='$deviceID' and a.accountID=b.accountID and a.accountID='$accountID' ";
                   $result= mysqli_query($gtsconnect,$qry) or die(mysqli_error($gtsconnect));
                   $lastValidLatitude=0;
                   $lastValidLongitude=0;
                   $lastEventTimestamp=0;
                   $crewNumber=0;
                   while ($row = mysqli_fetch_assoc($result)) {
                         $lastEventTimestamp= $row["lastEventTimestamp"];
                         $lastValidLatitude= $row["lastValidLatitude"];
                         $lastValidLongitude= $row["lastValidLongitude"];
                         $crewNumber=$row["crewNumber"];
                    }
                    mysqli_close($gtsconnect);
                    $estimateddis=distance1($lastValidLatitude,$lastValidLongitude,$incidentLatitude,$incidentLongitude);
                    $vehiclereachedin=round(floatval($estimateddis/45),2);
                    $vehiclereachedinexploded=explode('.',$vehiclereachedin);
                    $vehiclereachesin="expected time :".$vehiclereachedinexploded[0]."Hrs ".$vehiclereachedinexploded[1]."Mins";
                    $diff=$now-$lastEventTimestamp;
                    if($diff<600){
                        $msg="Dear ".$callerName.",Track the assigned ambulance ".$deviceID.", crew ".$crewNumber." ".$caseurl." ".$vehiclereachesin;

                       // $msg="प्रिय  ".$callerName." ,आपके लिए भेजी जा रही एम्बुलेंस की संख्या  ".$deviceID." एवं नंबर ".$crewNumber." है। एम्बुलेंस की स्थिति देखने के लिए  लिए$ के लिए $caseurl लिंक  पर क्लिक करें।अनुमानित समय : :$vhiclereachesin "; 
                    } else {
                        $msg="Dear ".$callerName.",The assigned CaseID is :".$q.". Ambulance is ".$deviceID.",crew is".$crewNumber.". ".$vehiclereachesin;
                     //   $msg="प्रिय  ".$callerName." ,आपके लिए भेजी जा रही एम्बुलेंस की संख्या  ".$deviceID." एवं नंबर ".$crewNumber." है। एम्बुलेंस अनुमानित समय : h$vehiclereachesin ";
                    }

                    $search= array(" ","#",",");
                    $replace= array("%20","%23","%2C");
                    $msgs= str_replace($search, $replace, $msg);
                    //$msgs=utf8_to_unicode($msgs);
                    /* Send Sms  to Caller*/
          //          $url2="http://api.smscountry.com/SMSCwebservice_bulk.aspx?User=gvk108&passwd=emri123&mobilenumber=";
                    $url2="http://smsw.co.in/API/WebSMS/Http/v1.0a/index.php?username=AMBUPW&password=HCKgqK&sender=AMBUPW&to=";
                    $url2.=$callerContact;
                    //$url2.=",9949123345";//gvk internal
                    //$url2.=",9866613362";//gvk internal
                   // $url2.="&sid=gvkemri108&mtype=N&DR=Y";
                    $url2.="&reqid=1&format={json|text}&unique=0";
                    $url2.="&message=".$msgs;
                  //  error_log($url2);
                    //$e['res'] = "true"; 
                    $curl = curl_init();
                    curl_setopt($curl, CURLOPT_URL, $url2);
                    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
                    curl_setopt($curl, CURLOPT_HEADER, false);
                    // execute and return string (this should be an empty string '')
                    $str = curl_exec($curl);
                    curl_close($curl);

                    if(strtolower($caseType)=="pickup"){
                         $geozoneID=$caseID."_".$deviceID."_scene";
                         $displayname="Scene Location of ".$callerName;
                        createZone($accountID,$geozoneID,1000,$incidentLatitude,$incidentLongitude,$displayname,'scene');
                     }

                    if(strtolower($caseType)=="ift"){
                         $geozoneID=$caseID."_".$deviceID."_ift";
                         $displayname=$caseID."_".$deviceID."_ift";
                        createZone($accountID,$geozoneID,500,$incidentLatitude,$incidentLongitude,$displayname,'ift');
                     }


                    if(strtolower($caseType)=="dropback"){

                          if($incidentLatitude!="0.0" && $incidentLongitude!="0.0"){
                             $geozoneID=$caseID."_".$deviceID."_dropback";
                             $displayname=$caseID."_".$deviceID."_dropback";
                             createZone($accountID,$geozoneID,500,$incidentLatitude,$incidentLongitude,$displayname,'dropback');
                          }


                          if($destLat1!="0.0" && $destLng1!="0.0"){
                             $geozoneID=$caseID."_".$deviceID."_home_1";
                             $displayname="Destination_1 ";
                             createZone($accountID,$geozoneID,500,$destLat1,$destLng1,$displayname,'home');
                          }
                          if($destLat2!="0.0" && $destLng2!="0.0"){
                             $geozoneID=$caseID."_".$deviceID."_home_2";
                             $displayname="Destination_2";
                             createZone($accountID,$geozoneID,500,$destLat2,$destLng2,$displayname,'home');
                          }
                          if($destLat3!="0.0" && $destLng3!="0.0"){
                             $geozoneID=$caseID."_".$deviceID."_home_3";
                             $displayname="Destination_3";;
                             createZone($accountID,$geozoneID,500,$destLat3,$destLng3,$displayname,'home');
                          }

                    }
               
                    //echo $url2."<br>";
                    /*  end */

                  /* 
                  //send sms to Coller Number
                  $url=$_SERVER['SERVER_NAME']."/API/sendSMS.php?q=".$caseID."&callerName=".$callerName."&deviceID=".$deviceID."&callerContact=".$callerContact."&incidentLatitude=".$incidentLatitude."&incidentLongitude=".$incidentLongitude; 
                  $curl = curl_init();
                  curl_setopt($curl, CURLOPT_URL, $url);
                  curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
                  curl_setopt($curl, CURLOPT_HEADER, false);
                  $str = curl_exec($curl);
                  curl_close($curl);*/

             
                     $jsonresponse= '{"Status":"success","url":"'.$resurl.'"}';
                    // $jsonresponse= '{"Status":"success","url":"'.$resurl.'","ReceivedTime":"'.date('d-M-Y h:i:s a',time()).'"}';
                  }else{
                      error_log("Duplicate Case");
                      $jsonresponse= '{"Status":"Fail:Duplicate entry '.$deviceID.'-'.$caseID.'","ReceivedTime":"'.date('d-M-Y h:i:s a',time()).'"}';
                      saveRequest($accountID,$deviceID,0,0,0,time(),'Fail:Duplicate entry '.$deviceID.'-'.$caseID,'New Case Arrived');
                  }
              }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( $incidentLatitude==''){
                  $jsonresponse= '{"Status":"Invalid recordslat 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 if($incidentLongitude==''){
                  $jsonresponse= '{"Status":"Invalid records long is null","ReceivedTime":"'.date('d-M-Y h:i:s a',time()).'"}';
                   saveRequest($accountID,$deviceID,0,0,0,time(),'Fail:Invalid records Lng in '.$deviceID.'-'.$caseID,'New Case Arrived');
              }else if( $caseTimestamp==''){
                  $jsonresponse= '{"Status":"Invalid records timestamp is null","ReceivedTime":"'.date('d-M-Y h:i:s a',time()).'"}';
                  saveRequest($accountID,$deviceID,0,0,0,time(),"Fail:Invalid case Time 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("Case Assigned End");

      function insertIntoDevice($account,$device,$case) {
          global $tacserver, $gtsusername, $gtspassword,$gtsdb,$LiveEventDBserver;
          $gtsconnect = mysqli_connect($LiveEventDBserver,$gtsusername,$gtspassword) or die ("Unable to connect to the database1 : " . mysqli_error($gtsconnect));
          mysqli_select_db($gtsconnect, $gtsdb);
          $updatequery="update Device set smsEmail='$case' where accountID='$account' and deviceID='$device'";
          mysqli_query($gtsconnect,$updatequery) or die(mysqli_error($gtsconnect));
          mysqli_close($gtsconnect);
     }
 


      function createZone($accountID,$geozoneid,$radious,$lat,$lng,$displayname,$type) {
          global $tacserver, $gtsusername, $gtspassword,$gtsdb,$LiveEventDBserver;
          $gtsconnect = mysqli_connect($LiveEventDBserver,$gtsusername,$gtspassword) or die ("Unable to connect to the database1 : " . mysqli_error($gtsconnect));
          mysqli_select_db($gtsconnect, $gtsdb);
          $lat=floatval($lat);
          $lng=floatval($lng);
          $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)));
          $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','1','1','1','#ffa500','0','$radious','$lat','$lng','61968','62000','1',unix_timestamp(now()),'$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',unix_timestamp(now()),0,0,'','','','','','','')";


         // error_log($insertzone);
          mysqli_query($gtsconnect,$insertzone) or die(mysqli_error($gtsconnect));
          //delete 24 hours old scene 
       /*   $deleteoldScene="delete FROM Geozone where geozoneID like '%home%' and  (unix_timestamp(now())-creationTime)>21600";  //12 hours    
          if($type=="scene"){
             $deleteoldScene="delete FROM Geozone where geozoneID like '%scene%' and  (unix_timestamp(now())-creationTime)>21600";//12 hours
          }else if($type="ift"){
             $deleteoldScene="delete FROM Geozone where geozoneID like '%ift%' and  (unix_timestamp(now())-creationTime)>21600";//12 hours
          }else if($type=="dropback"){
             $deleteoldScene="delete FROM Geozone where geozoneID like '%dropback%' and  (unix_timestamp(now())-creationTime)>21600";//12 hours
          }*/
          $deleteoldScene="delete FROM Geozone where (geozoneID like '%home%' or geozoneID like '%scene%' or geozoneID like '%ift%' or geozoneID like '%dropback%') and (unix_timestamp(now())-creationTime)>10800";

         // error_log($deleteoldScene);
          mysqli_query($gtsconnect,$deleteoldScene) or die(mysqli_error($gtsconnect));
          mysqli_close($gtsconnect);
     }

   
    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 updateCaseStatus($deviceID){
       global $tacserver, $tacusername, $tacpassword,$tacdb,$LiveEventDBserver;
       $tacconnect = mysqli_connect($LiveEventDBserver,$tacusername,$tacpassword) or die ("Unable to connect to the database1 : " . mysqli_error($tacconnect));
       mysqli_select_db($tacconnect, $tacdb);
       $updatequery="";
        $updatequery="update caseManager set caseStatus='close',caseCloseTime='".time()."' where deviceID='$deviceID' and caseStatus='assigned' ";
       //error_log($updatequery);
       mysqli_query($tacconnect,$updatequery) or die(mysqli_error($tacconnect));
       mysqli_close($tacconnect);
 }


?>
