<?php
       
    date_default_timezone_set('Asia/Kolkata');
   header('Content-Type: application/json');
    $accountID=$_GET['accountID'];
    $vehicleID=$_GET['vehicleID'];
    $fromDate=$_GET['fromDate'];
    $idletime=$_GET['idleTime'];
    $toDate=$_GET['toDate'];
    $requestTime=time();
    $user=$_GET['user'];
    $password=$_GET['password'];
if($user=="gvkemri" && $password=="glovision"){

    if($fromDate <= $toDate && abs($fromDate-$toDate)<86400){

    //get Event Data For Given Date Range
   // $eventData=array(array());
    $eventData=getEventData($vehicleID,$accountID,$fromDate,$toDate);

    $idleList=array();//store idle points
    $totalDis=0;
    $startTime=0;
    $endTime=0;
    $idleStart='no';
    $count=0;
    $totalIdleTime=0;
    $startDay='';
    for($evntindx=0;$evntindx<count($eventData);$evntindx++){
        $statusinfo="Stopped";
        if($eventData[$evntindx][2]=="61714"){
            $statusinfo="Moving";
        }else if($eventData[$evntindx][2]=="61718"){
            $statusinfo="Idle";
        }else if($eventData[$evntindx][2]=="62467"){
            $statusinfo="Ignition Off";
        }else if($eventData[$evntindx][2]=="62465"){
            $statusinfo="Ignition On";
        }
        //find Idle Point
        if( $idleStart=="no" && $statusinfo!="Moving"){
            $idleStart="yes";
            $startTime=$eventData[$evntindx][10];
        }
        //end Idle point
        if($idleStart=="yes" && $statusinfo=="Moving"){
            $idleStart="no";
            $endTime=$eventData[$evntindx][10];
            $dis=abs($endTime-$startTime);
            $disdump=$dis;
            $totalIdleTime=$totalIdleTime+$disdump; 
            if(($dis/60)>=$idletime){
                $idleList[$count]["deviceID"]=$eventData[$evntindx][1];
                $idleList[$count]["startTime"]=date('d-m-Y H:i:s',$startTime);
                $idleList[$count]["endTime"]=$eventData[$evntindx][3];
                $idleList[$count]["address"]=$eventData[$evntindx][6];
                $idleList[$count]["latitude"]=round($eventData[$evntindx][8],5);
                $idleList[$count]["longitude"]=round($eventData[$evntindx][9],5);
                $idleList[$count]["idletime"]=TimeFormate($disdump);
                $count++;
            }
        }
        $totalDis=$totalDis+$eventData[$evntindx][4];
    }

   //if idle continue after given time range
    if( $idleStart=="yes"){
          $endTime=$eventData[count($eventData)-1][10];
            $dis=abs($endTime-$startTime);
            $disdump=$dis;
            $totalIdleTime=$totalIdleTime+$disdump;
            if(($dis/60)>=$idletime){
                $idleList[$count]["deviceID"]=$eventData[count($eventData)-1][1];
                $idleList[$count]["startTime"]=date('d-m-Y H:i:s',$startTime);
                $idleList[$count]["endTime"]=$eventData[count($eventData)-1][3];
                $idleList[$count]["address"]=$eventData[count($eventData)-1][6];
                $idleList[$count]["latitude"]=round($eventData[count($eventData)-1][8],5);
                $idleList[$count]["longitude"]=round($eventData[count($eventData)-1][9],5);
                $idleList[$count]["idletime"]=TimeFormate($disdump);
                $count++;
            }

    }
    saveRequest($accountID,$vehicleID,$fromDate,$toDate,$totalDis,$requestTime,'success'); 
    echo '{"result": ' . json_encode(utf8ize($idleList)) .',"Distance":'.$totalDis.'}';

 }else{
     if($fromDate>$toDate){
        echo '{"result": "' ."From Date Should be less then To Date" .'"}';
        saveRequest($accountID,$vehicleID,$fromDate,$toDate,0,$requestTime,"From Date Should be less then To Date");
     }
     else{
        echo '{"result": "' ."Requested Time Range Should be in 24 Hr" .'"}';
        saveRequest($accountID,$vehicleID,$fromDate,$toDate,0,$requestTime,"Requested Time Range Should be in 24 Hr");
     }
}
}else{
    echo '{"result": "' ."Wrong Request" .'"}';
}

    function utf8ize($d) {
         if (is_array($d)) {
             foreach ($d as $k => $v) {
                  $d[$k] = utf8ize($v);
             }
         } else if (is_string ($d)) {
             return utf8_encode($d);
         }
         return $d;
   }


   



function TimeFormate($timeDiff){
	$hours=0;
	$min=0;
	$sec=0;
        if ($timeDiff==0) {
            return 0;
        }
	if($timeDiff>=3600){
		$hours=intval($timeDiff/(60*60));
		$tempmin=$timeDiff%(60*60);
		$result=TimeFormate($tempmin);
		return $hours."Hr :".$result;
	}else if($timeDiff>=60){
		 $min=intval($timeDiff/60);
		 $tempsec=$timeDiff%60;
		 
		 return $min." Min :".TimeFormate($tempsec);
	}else{
	     return $timeDiff." sec";	
	}
	
}

function getEventData($vehicleID,$accountID,$fromDate,$toDate){
      $eventData=array(array());

      $gtsserver="localhost";
      $gtsusername="root"; 
      $gtspassword="gl0v1s10n";
      $gtsdb="gts";
      $currentTime=time(); 
      $difftime1=$currentTime-$fromDate;
      $difftime2=$currentTime-$toDate;
      if($difftime1<11700 || $difftime2<11700){//if request for befor 3 hours 15 mts data go to prod server
         $gtsserver="up108.glovision.co";
        $gtsusername='gts';
        $gtspassword='opengts';
        $gtsdb='gts';

       }
      $Query = " SELECT heading, geozoneID,timestamp,deviceID,FROM_UNIXTIME(timestamp) as 'time1',speedKPH,address,odometerKM+odometerOffsetKM as 'distance',statusCode,analog0,latitude,longitude FROM `EventData` where accountID='$accountID' and   deviceID='$vehicleID'  and timestamp between '$fromDate' and '$toDate' and latitude<>0 and longitude<>0 order by timestamp asc ";  //request from web for particular vehicle
       $gtsconnect = mysqli_connect($gtsserver, $gtsusername, $gtspassword) or die ("Unable to connect to the database: " . mysqli_error($gtsconnect));
       mysqli_select_db($gtsconnect,$gtsdb);
       $rs =mysqli_query($gtsconnect,$Query) or die ("Query error1: " . mysqli_error($gtsconnect));
       $num_rows = mysqli_num_rows($rs);
       $i=0; 
       while($row = mysqli_fetch_assoc($rs)) {
          if($i==0){
              $startlatlong=round($row['latitude'],5).'-'.round($row['longitude'],5);
              $factory=$row['address'];
             $row['distance']=0;

         } 
           $eventData[$i][0]=$row['geozoneID'];
           $eventData[$i][1]=$row['deviceID'];
           $eventData[$i][2]=$row['statusCode'];
           $eventData[$i][3]=$row['time1'];
           $eventData[$i][4]=$row['distance'];
           $eventData[$i][5]=$row['speedKPH'];
           $eventData[$i][6]=$row['address'];
           $eventData[$i][7]=$row['analog0'];
           $eventData[$i][8]=$row['latitude'];
           $eventData[$i][9]=$row['longitude'];
           $eventData[$i][10]=$row['timestamp'];
           $eventData[$i][11]=findDirection($row['heading']);
           $eventData[$i][12]=$row['heading'];
           $endlatlong=round($row['latitude'],5).'-'.round($row['longitude'],5);
           if($i>0 && $row['latitude']!= 0 && $row['longitude']!=0 && $eventData[$i-1][8]!=0 && $eventData[$i-1][9]!=0) {

                 $eventtoeventdistance=distance1($row['latitude'],$row['longitude'], $eventData[$i-1][8], $eventData[$i-1][9]);
                 $difftimes=abs(strtotime($eventData[$i][3])-strtotime($eventData[$i-1][3]));
                 $maxDistanceTravelledperMint=2;//max km travelled per mint
                 $calculatedDistenceTravelledperMint=intval($eventtoeventdistance)/$difftimes;
                 if(is_nan($eventtoeventdistance) || ($eventtoeventdistance/$difftimes>0.025)){//if distnace greater than 2 km with 5 minits then distnace=0 bzc drift point in 
                    $eventData[$i][4]=0;
                 //   $i++;
                }else{
                   $eventData[$i][4]=$eventtoeventdistance;
                   $travelDistance=$travelDistance+$eventtoeventdistance;
                   $i++;
               }

              if(is_nan($eventData[$i][4])){
                 $eventData[$i][4]=0;
              }


          }
         if($i==0){$i++;}
            
         //  $i++;
       }
       mysqli_close($gtsconnect);
       return  $eventData;
}

function findDirection($degree){
  if($degree>=0 && $degree<10){return 'N';}
  else if($degree>10 && $degree<80){return 'NE';}

  else if($degree>=80 && $degree<100){return 'E';}
  else if($degree>=100 && $degree<170){return 'SE';}
  else if($degree>=170 && $degree<190){return 'S';}
  else if($degree>=190 && $degree<260){return 'SW';}
  else if($degree>=260 && $degree<280){return 'W';}
  else if($degree>=280 && $degree<350){return 'NW';}
  else if($degree>=350 && $degree<360){return 'N';}



}

function saveRequest($account,$device,$fromDate,$toDate,$distance,$requestTime,$status) {
    $host='localhost';
    $tacconnect = mysqli_connect($host,'root', 'gl0v1s10n') or die ("Unable to connect to the database1 : " . mysqli_error($tacconnect));
    mysqli_select_db($tacconnect, 'autocare_gts');

    $request_time_query="INSERT into API_Request_Time_Table (accountID,deviceID,fromDate,toDate,distance,requestTime,status,requestfor) VALUES ('$account','$device','$fromDate','$toDate','$distance','$requestTime','$status','distancewithidle')";
   mysqli_query($tacconnect,$request_time_query) or die(mysqli_error($tacconnect));
    mysqli_close($tacconnect);
}

function distance1($lat1, $lon1, $lat2, $lon2) {
 if($lat1 == $lat2 && $lon1 == $lon2){
 return 0;
  
 }else{$theta = $lon1 - $lon2;
  $dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) +  cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta));
  $dist = acos($dist);
  $dist = rad2deg($dist);
  $miles = $dist * 60 * 1.1515;
  return $miles* 1.609344;}
}
?>
