<?php

class Webservices_driver_model extends CI_Model {

      function __construct() {

            parent::__construct();

      }

      // *********************** NEMT DRIVER DOCUMENTATION ********************

      public function login($request) {

            $this->db->where("phone", $request['phone_number']);

            $this->db->where('password', md5($request['password']));

            $this->db->where('status !=', 0);

            $query = $this->db->get('drivers');

            if ($query->num_rows() > 0) {

                  $unique_id = $this->generate_unique();

                  $rs = $query->row();

                  $this->EncryptedPatientKey($unique_id, $rs->driver_id);

                  $data = array('first_time_login' => 'false');

                  $first_time_login = ($rs->first_time_login ==  'true' ? filter_var(true, FILTER_VALIDATE_BOOLEAN) : filter_var(false, FILTER_VALIDATE_BOOLEAN));

                  if($first_time_login == true){
                       
                        $this->db->update('drivers', array('first_time_login' => 'false'));      
                  }
                 
                  return $result = array('status' => 'success', 'user_id' => $rs->driver_id, 'auth_token' => $unique_id, 'phone' => $rs->phone, 'name' => $rs->first_name." ".$rs->last_name, 'first_time_user' => $first_time_login);
                  
            } else {

                  return false;

            }

      }

      public function generate_unique() {

            $unqe = md5(uniqid(time().mt_rand(), true));

            return $unqe;

      }

      public function EncryptedPatientKey($unique_id, $user_id) {

            $this->db->insert('driver_auth_table', array('driver_id' => $user_id, 'unique_id' => $unique_id));

      }

      // *********************** DOCUMENT UPLOAD ********************

      function doc_upload($request) {
            
            $query = $this->db->where('unique_id', $request['auth'])->get('driver_auth_table');

            if ($query->num_rows() > 0) {

                  $rs = $query->row();

                  $driv_id = $rs->driver_id;

                  if($request['type'] == 1){

                         $data = array('licence' => $request['image']);
                         $where = array('driver_id' => $driv_id);
                         $this->db->where($where)->update('drivers', $data);
                  }
                  elseif($request['type'] == 2){
                        
                         $result = $this->db->query("SELECT vehicle FROM drivers WHERE driver_id=$driv_id")->row();
                         $data = array('vehicle_reg_image' => $request['image']);
                         $where = array('vehicle_id' => $result->vehicle);
                         $this->db->where($where)->update('vehicles', $data);
                  }
                  elseif($request['type'] == 3){  
                        
                         $data = array('profile_image' => $request['image']);
                         $where = array('driver_id' => $driv_id);
                         $this->db->where($where)->update('drivers', $data);
                         
                  }
                        return true;

            } else {

                        return false;

            }

      }

      // *********************** GET DRIVER PROFILE ********************

      public function profile($request) {

            $query = $this->db->where('unique_id', $request['auth'])->get('driver_auth_table');

            if ($query->num_rows() > 0) {

                  $query_result = $query->row();

                  $driv_id = $query_result->driver_id;

                  $data = "SELECT drivers.driver_id, drivers.first_name, 
                  drivers.last_name, drivers.profile_image, vehicles.vehicle_reg_no FROM drivers 
                  INNER JOIN vehicles ON drivers.vehicle = vehicles.vehicle_id WHERE driver_id = '$driv_id' ";

                  $result = $this->db->query($data);

                  $rs = $result->row();
                 
                  return $result = array('id' => $rs->driver_id, 
                        'name' => $rs->first_name." ".$rs->last_name, 
                        'car_number' => $rs->vehicle_reg_no, 
                        'profile_photo' => $rs->profile_image);
            
            } else {

                  return false;
            }

      }

      // *********************** GET DRIVER STATUS ********************

      public function driver_status($request) {

            $query = $this->db->where('unique_id', $request['auth'])->get('driver_auth_table');

            if ($query->num_rows() > 0) {

                  $rs = $query->row();

                  $query = $this->db->where('driver_id', $rs->driver_id)->get('drivers')->row();

                  $res = $query->is_online;

                  $new_array = array('driver_status' => filter_var($res, FILTER_VALIDATE_BOOLEAN));

                  return $new_array;

            } else {

                  return false;

            }

      }

      // *********************** UPDATE DRIVER STATUS ********************

      public function status($request) {

            $query = $this->db->where('unique_id', $request['auth'])->get('driver_auth_table');

            if ($query->num_rows() > 0) {

                  $rs = $query->row();

                  $data = array('is_online' => filter_var($request['driver_status'], FILTER_VALIDATE_BOOLEAN));

                  $this->db->where('driver_id', $rs->driver_id)->update('drivers', $data);

                  return true;

            } else {

                  return false;

            }

      }

            // *********************** UPDATE DRIVER STATUS ********************

      public function arrived_at_customer($request) {


            $query = $this->db->where('unique_id', $request['auth'])->get('driver_auth_table');

            if ($query->num_rows() > 0) {

                  $rs = $query->row();

                  $this->db->where('transport_id', $request['trip_id'])->update('transport_details', array('car_arrival' => 1));

                  return true;

            } else {

                  return false;

            }

      }

      // *********************** UPDATE DRIVER STATUS ********************

      public function driver_onstatus($request) {

            $query = $this->db->where('unique_id', $request['auth'])->get('driver_auth_table');

            if ($query->num_rows() > 0) {

                  $rs = $query->row();

                  $driv_id = $rs->driver_id;
                  
                  if ($request['driver_status'] == 'true') {

                        $array = array('driver_id' => $driv_id, 'cur_date' => date('Y-m-d'), 'sign_in' => time());

                        $this->db->insert('driver_online', $array);

                        return true;

                  } else {

                        $cur_date = date('Y-m-d');

                        $rs = $this->db->query("SELECT * FROM driver_online WHERE driver_id='$driv_id' AND cur_date='$cur_date' ORDER BY id DESC LIMIT 0,1")->row();

                        if (count($rs) > 0) {

                              if ($rs->sign_out == '') {

                                    $array = array('sign_out' => time());

                                    $this->db->where('id', $rs->id)->update('driver_online', $array);

                                    return true;

                              } else {

                                    return false;

                              }

                        } else {

                              return false;

                        }

                  }

            } else {

                  return false;

            }

            print json_encode($result);

      }

      

      // *********************** UPDATE DRIVER PASSWORD ********************

      public function update_password($request) {

            $query = $this->db->where('unique_id', $request['auth'])->get('driver_auth_table');

            if ($query->num_rows() > 0) {
                  $rs = $query->row();
                  $user_id = $rs->driver_id;
                  $data = array('password' => md5($request['new_password']));
                  $this->db->where('driver_id', $user_id);
                  $this->db->update('drivers',$data);
                  return $result = array('status' => 'success');

            } else {

                  return false;

            }

      }

      // *********************** UPDATE DRIVER USER NAME ********************

      public function update_user_name($auth,$request) {

            $query = $this->db->where('unique_id', $auth)->get('driver_auth_table');

            if ($query->num_rows() > 0) {

                  $rs = $query->row();

                  $this->db->where('driver_id',$rs->driver_id)->update('drivers',$request);

                  return true;

            } else {

                  return false;

            }

      }

      // *********************** UPDATE VEHICLE NUMBER ********************

      public function update_vehicle_number($request) {

            $query = $this->db->where('unique_id', $request['auth'])->get('driver_auth_table');

            if ($query->num_rows() > 0) {

                  $rs = $query->row();
            
                  $data = $this->db->query("SELECT drivers.vehicle FROM drivers WHERE driver_id=$rs->driver_id")->row();

                  $this->db->where('vehicle_id', $data->vehicle)->update('vehicles', array('vehicle_reg_no' => $request['vehicle_number']));

                  return true;

            } else {

                  return false;

            }

      }

      // *********************** UPDATE DRIVER LOCATION ********************

      public function driver_location($request) {

            $query = $this->db->where('unique_id', $request['auth'])->get('driver_auth_table');

            if ($query->num_rows() > 0) {

                  $rs = $query->row();

                  if (!empty($request["latitude"] && $request['longitude'])) {

                        $data = array('lat_driver' => $request['latitude'], 'lng_driver' => $request['longitude']);

                        $this->db->where('driver_id', $rs->driver_id)->update('drivers', $data);

                        return $result = array('status' => 'success');

                  } else {

                        return false;

                  }

            } else {

                  return false;

            }

      }

      // *********************** PAYMENT STATUS ********************

      public function payment_status($request) {
            
            $query = $this->db->where('unique_id', $request['auth'])->get('driver_auth_table');

            if ($query->num_rows() > 0) {

                  $rs = $query->row();

                  $trip_id = $request['trip_id'];

                  $data = "SELECT payment_status FROM transport_details WHERE transport_id = '$trip_id' ";
                    
                  $query1 = $this->db->query($data)->row();

                  return $query1;

            } else {

                  return false;

            }

      }

      // *********************** TRIP ACCEPT ********************

      public function accept($request) {

            $id = $request['request_id'];

            $status = (isset($request['trip_accept']) && !empty($request['trip_accept']))?'4':'5';

            $requestDetails = "SELECT * FROM transport_details WHERE transport_id = '$id' ";
                    
            $rquDetails = $this->db->query($requestDetails)->row();

            $query = $this->db->where('unique_id', $request['auth'])->get('driver_auth_table');

            if ($query->num_rows() > 0) {

                  $rs = $query->row();
                  
                  $data = array('driver_id' => $rs->driver_id);

                  $this->db->where('transport_id', $id)->update('transport_details', $data);

                  $data = $this->db->where('transport_id', $id)->get('transport_details')->row_array();
                 
                  $res = $this->db->select('booking_code')->get('setting')->row();
                  
                  $code = $res->booking_code;

                  $rand = rand(1111, 99999);

                  $book_id = $code."$rand";

                  $driverDetails = $this->db->query("SELECT vehicle_id FROM `drivers` WHERE driver_id = '$rs->driver_id'")->row();
                  
                  $data2 = array('vehicle_type' => $driverDetails->vehicle_id, 'driver_id' => $data['driver_id'], 'trip_no' => $book_id, 'book_date' => time(), 'start_time' => time(), 'status' => $status);

                  $this->db->where('transport_id', $request['request_id'])->update('transport_details', $data2);

                  $this->db->where(array('driver_id'=>$rs->driver_id,'trip_id'=>$id));

                  $this->db->update('driver_request', array('status' => 1));
                 
                  $data4 = array('trip_id' => $rquDetails->transport_id, 'cust_id' => $rquDetails->customer_id, 'driver_id' => $rs->driver_id);

                  $this->db->insert('feedback', $data4);

                  $data5 = "SELECT t.transport_id AS trip_id, t.status AS trip_status, t.request_type AS trip_type, c.customer_id AS customer_id, CONCAT(c.first_name,' ',c.last_name) AS customer_name, c.phone AS customer_phone, c.profile_image AS profile_image, t.pickup_location AS source_location, t.pickup_lat AS source_latitude, t.pickup_lng AS source_longitude, t.drop_location AS destination_location, t.drop_lat AS destination_latitude, t.drop_lng AS destination_longitude FROM transport_details AS t LEFT JOIN customers AS c ON c.customer_id = t.customer_id WHERE t.transport_id ='$id'";

                  $query = $this->db->query($data5);

                  $result = $query->row();
            
                  return $result;

                  return true;

            } else {

                  return false;
            }

      }

      

      // *********************** APP STATUS ********************

      function statusof_app($request) {

            
            $query = $this->db->where('unique_id', $request['auth'])->get('driver_auth_table');

            if ($query->num_rows() > 0) {

                  $rs = $query->row();

                  $driv_id = $rs->driver_id;

                  $data1 = "SELECT * FROM transport_details WHERE driver_id = '$driv_id' ORDER BY transport_id DESC LIMIT 0,1";

                  $query = $this->db->query($data1);

                  $res = $query->row();

                  if(!empty($res)){
                        $driver_status = $res->status;
                        if ($driver_status == 4 || $driver_status == 5) {
                              $data = "SELECT transport_details.total_time AS time, 
                                              transport_details.trip_distance AS distance, 
                                              drivers.profile_image AS driver_photo, 
                                              drivers.phone AS driver_phone_number, 
                                              customers.phone AS customer_phone_number,
                                              customers.profile_image AS customer_photo,
                                              CONCAT(customers.first_name,' ',customers.last_name) AS customer_name, 
                                              transport_details.status AS request_status, 
                                              transport_details.transport_id AS trip_id, 
                                              transport_details.pickup_lat AS source_latitude,
                                              transport_details.pickup_lng AS source_longitude, 
                                              transport_details.drop_lat AS destination_latitude, 
                                              transport_details.drop_lng AS destination_longitude 
                                        FROM transport_details 
                                        LEFT JOIN drivers ON transport_details.driver_id = drivers.driver_id 
                                        LEFT JOIN customers ON customers.customer_id = transport_details.customer_id 
                                        WHERE transport_details.driver_id = '$driv_id' AND 
                                              transport_details.status IN(4,5) 
                                        ORDER BY transport_details.transport_id DESC LIMIT 0,1";
                              $result = $this->db->query($data)->row();
                              return $result;
                        } else {
                              return 0;
                        }
                  } else {
                        return 0;
                  }

            } else {

                  print json_encode(array('status' => 'error', 'code' => '209', 'message' => 'Something Went wrong'));

                  die();

            }

      }

      // *********************** STATUs OF RIVER ********************

      public function status_driver($id) {

            $data = $this->db->query("SELECT *, car_arrival AS trip_status  FROM `transport_details` WHERE transport_id = '$id'")->row();


            if ($data->status == 6 && $data->cash_collection == 1) {

                  $driver_status = 4;

                  return $driver_status;
            }
            elseif($data->status == 6 && $data->cash_collection == 0) {

                  $driver_status = 3;

                  return $driver_status;
            }
            elseif($data->status == 5) {

                  $driver_status = 2;

                  return $driver_status;
            }
            elseif($data->car_arrival == 1) {

                  $driver_status = 1;

                  return $driver_status;
            }
            else {
                  $driver_status = 0;

                  return $driver_status;
            }

      }

      // *********************** EMERGENCY RIDE HISTORY ********************

      public function history_trips_emergency($request) {

            $query = $this->db->where('unique_id', $request['auth'])->get('driver_auth_table');

            if ($query->num_rows() > 0) {

                  $rs = $query->row();

                  $driv_id = $rs->driver_id;

                  $data1 = "SELECT * FROM setting WHERE id = '1' ";

                  $query1 = $this->db->query($data1);

                  $rs = $query1->row();

                  $currency = $rs->currency;

                  $query = "SELECT t.transport_id AS id,customers.customer_id AS customer_id,
                            CONCAT(customers.first_name,' ',customers.last_name) AS customer_name, 
                            customers.profile_image AS customer_photo, 
                            t.pickup_location AS source_location,t.pickup_lat AS source_latitude,
                            t.drop_location AS destination_location,
                            t.pickup_lng AS source_longitude,t.created_date AS date,
                            CONCAT(t.trip_cost,'','$currency') AS fare,
                            t.drop_lat AS destination_latitude,t.drop_lng AS destination_longitude
                            FROM transport_details AS t 
                            LEFT JOIN drivers AS d ON d.driver_id = t.driver_id 
                            LEFT JOIN customers ON t.customer_id = customers.customer_id 
                            WHERE t.driver_id = '$driv_id' AND request_type = 1 ";    
                  return $query;  
            } else {
                  return false;
            }

      }


      // *********************** EMERGENCY RIDE HISTORY ********************

       public function history_trips_schedule($request) {
            $query = $this->db->where('unique_id', $request['auth'])->get('driver_auth_table');

            if (!empty($query) && $query->num_rows() > 0 && !empty($rs = $query->row()) && 
                !empty($driv_id = $rs->driver_id)) {

                  $data = "SELECT TRNS.transport_id AS id, CUST.customer_id AS customer_id, 
                           CONCAT(CUST.first_name,' ',CUST.last_name) AS customer_name, 
                           TRNS.pickup_lng AS source_longitude,TRNS.pickup_lat AS source_latitude, 
                           TRNS.drop_location AS destination_location,TRNS.trip_cost AS fare,
                           TRNS.drop_lat AS destination_latitude,DR.status AS request_status, 
                           CUST.profile_image AS customer_photo,TRNS.appointment_time AS date,
                           TRNS.pickup_location AS source_location,TRNS.status AS ride_status,
                           TRNS.drop_lng AS destination_longitude
                           FROM transport_details AS TRNS 
                           INNER JOIN driver_request AS DR ON DR.trip_id = TRNS.transport_id 
                           INNER JOIN customers AS CUST ON TRNS.customer_id = CUST.customer_id
                           WHERE DR.driver_id = '$driv_id' AND request_type = 3 AND 
                                 TRNS.status IN (1,3,4,5,6,8)";
                  $result = $this->db->query($data)->result_array();  
                  foreach($result AS $key => $ride){
                        $result[$key]['type'] = 1;
                        if($ride['request_status'] == 1 && $ride['request_status'] == 6){
                              $result[$key]['type'] = 2;
                        }
                        unset($result[$key]['request_status'],$result[$key]['ride_status']);
                  }
                  return $result;  

            } else {

                  return false;

            }

      }
            

      
     






      




      // *********************** END NEMT DRIVER DOCUMENTATION ********************

      
               function insert_trip_deduction($userId_new,$fare){
               
            $wallet = array( 
             
              'paid_amount' =>  $fare,
              'payment_status' => 'success',
              'created' => date("d/m/Y"),
              'modified' => date("d/m/Y"),
              'transaction_date' =>  time() * 1000,
              'transaction_type' =>  "3",
              'amount' =>  $fare * 0.019,
              'user_id' => $userId_new,
              'payment_type' =>  "3"

        );
            
            $query = $this->db->insert('wallet_transactions',$wallet);
             //print_r($this->db->last_query());exit;
      }


        function update_user_wallet($userId_new,$fare) {
           
            $this->db->where('id', $userId_new);
            $query = $this->db->get('customer');
            $res = $query->row();
            $cur_wallet = $res->wallet_balance;
            $fin_wallet = $cur_wallet - $fare;
            $array = array(
                        'wallet_balance' => $fin_wallet);

            $this->db->where('id', $userId_new);
            $result = $this->db->update('customer', $array);
            //print_r($this->db->last_query());exit;
            return $result;

      }


function booster_seat($request) {

            $query = $this->db->where('unique_id', $request['auth'])->get('driver_auth_table');
            if ($query->num_rows() > 0) {

                  $rs = $query->row();
                  $driver_id= $rs->driver_id;

                  $data=array('status_booster_seat'=>$request['is_booster_seat']);
                  $this->db->where('id', $driver_id);
                  $this->db->update('drivers',$data);
                  return true;

            } else {

                  return false;

            }

      }

      public function driver_reg($data) {

            $num = $this->db->where('phone', $data['phone'])->get('drivers')->num_rows();

            $num1 = $this->db->where('email', $data['email'])->get('drivers')->num_rows();

            if ($num > 0) {
                  $result = array('status' => 'error', 'message' => 'Mobile number Already Exists');
            }
            elseif($num1 > 0) {
                  $result = array('status' => 'error', 'message' => 'Email Already Exists');
            }
            else {
                  $unique_id = $this->generate_unique();
                  $otp = rand(1111, 9999);
                  $this->db->insert('drivers', array('phone' => $data['phone'], 'email' => $data['email'], 'password' => md5($data['password']),'driver_name' => $data['name'], 'city' => $data['city']));
                  $user_id = $this->db->insert_id();

                  $this->db->insert('car', array('driv_id' => $user_id));
                  for ($i = 1; $i <= 12; $i++) {
                        $data1 = array('driver_id' => $user_id,
                                    'type' => $i);
                        $new_result[] = $data1;
                  }
                  $this->db->insert_batch('driver_document', $new_result);
                  $this->db->insert('car', array('driv_id' => $user_id));
                 // echo $this->db->last_query();die;
                  $this->EncryptedPatientKey($unique_id, $user_id);

                  if ($user_id) {

                        $result = array('status' => 'success', 'user_id' => $user_id, 'auth_token' => $unique_id, 'is_phone_verified' => true, 'name' => $data['name'], 'email' => $data['email'], 'city' => $data['city'], 'phone' => $data['phone']);

                  } else {
                        $result = array('status' => 'error');
                  }

            }

            return $result;

      }


            function get_booster_status($request) {

            $query = $this->db->where('unique_id', $request['auth'])->get('driver_auth_table');

            if ($query->num_rows() > 0) {

                  $rs = $query->row();

                  $query = $this->db->where('id', $rs->driver_id)->get('drivers')->row();

                  $res = $query->status_booster_seat;

                  $new_array = array(

                              'booster_status' => filter_var($res, FILTER_VALIDATE_BOOLEAN));

                  return $new_array;

            } else {

                  return false;

            }

      }




      

      public function update_fcm($request) {

            $query = $this->db->where('unique_id', $request['auth'])->get('driver_auth_table');

            if ($query->num_rows() > 0) {

                  $rs = $query->row();

                  $data = array('fcm_token' => $request['fcm_token']);

                  $this->db->where('driver_id', $rs->driver_id)->update('drivers', $data);

                  return true;

            } else {

                  return false;

            }

      }

      public function mobile_availability($request) {

            $phone = $request['phone'];

            $num = $this->db->where('phone', $phone)->get('drivers')->num_rows();

            if ($num > 0) {

                  return $result = array('status' => 'success', 'phone' => $phone, 'is_available' => 'false');

            } else {

                  return false;

            }

      }

     
      // public function prof_update($request){

      //       $query = $this->db->where('unique_id',$request['auth'])->get('driver_auth_table');

      //       if($query->num_rows()>0){

      //           $rs = $query->row();

      //           print_r($rs->driver_id);

      //           $data = array('driver_name'=>$request['name'],'email'=>$request['email'],'phone'=>$request['phone'],'address'=>$request['address'],'city'=>$request['city'],'state'=>$request['state'],'post_code'=>$request['postal_code'],'image'=>$request['image']);

      //           $this->db->where('id',$rs->driver_id)->update('drivers',$data);

      //           //echo $this->db->last_query();

      //           return $result = array('id'=>$rs->driver_id,'name' => $data['driver_name'],'phone'=>$data['phone'],'email'=>$data['email'],'address'=>$data['address'],'city'=>$data['city'],'state'=>$data['state'],'post_code'=>$data['post_code'],'image'=>$data['image']);

      //       }else{

      //           return false;

      //       }


      //   }


      function prof_update($request) {

            // print_r($request);

            $query = $this->db->where('unique_id', $request['auth'])->get('driver_auth_table');

            if ($query->num_rows() > 0) {

                  $data = array();

                  if (isset($request['name']) && $request['name'] != '') {

                        $data['driver_name'] = $request['name'];

                  }

                  if (isset($request['email']) && $request['email'] != '') {

                        $data['email'] = $request['email'];

                  }

                  if (isset($request['phone']) && $request['phone'] != '') {

                        $data['phone'] = $request['phone'];

                  }

                  if (isset($request['address']) && $request['address'] != '') {

                        $data['address'] = $request['address'];

                  }

                  if (isset($request['city']) && $request['city'] != '') {

                        $data['city'] = $request['city'];

                  }

                  if (isset($request['state']) && $request['state'] != '') {

                        $data['state'] = $request['state'];

                  }

                  if (isset($request['postal_code']) && $request['postal_code'] != '') {

                        $data['post_code'] = $request['postal_code'];

                  }

                  if (isset($_FILES['profile_photo'])) {

                        $image = '';

                        if (is_uploaded_file($_FILES['profile_photo']['tmp_name'])) {

                              $uploads_dir = './assets/uploads/profile_pic/';

                              $tmp_name = $_FILES['profile_photo']['tmp_name'];

                              $pic_name = $_FILES['profile_photo']['name'];

                              $pic_name = str_replace(' ', '_', mt_rand().$pic_name);

                              move_uploaded_file($tmp_name, $uploads_dir.$pic_name);

                              $image = $uploads_dir.$pic_name;

                        }

                        if ($image != '') {

                              $data['image'] = $image;

                        }

                  }

                  $rs = $query->row();

                  $this->db->where('id', $rs->driver_id)->update('drivers', $data);

                  $res = $this->db->query("SELECT * FROM `driver` WHERE id = '$rs->driver_id'")->row();

                  // print_r($res);

                  return $res;

                  //return true;

            } else {

                  return false;

            }

      }

     
      //  public function doc_status($request){


      //     $query = $this->db->where('unique_id',$request['auth'])->get('driver_auth_table');


      //     if($query->num_rows()>0){


      //          $rs = $query->row();

      //          $id = $rs->driver_id;


      //         $data = "SELECT * FROM driver_document WHERE driver_id = '$id'";

      //         $query = $this->db->query($data);

      //         $result = $query->result_array();


      //         return $result;

      //     } else {

      //         return false;

      //     }


      // }


      public function doc_status($request) {

            $this->load->helper('general');

            $query = $this->db->where('unique_id', $request['auth'])->get('driver_auth_table');
            if ($query->num_rows() > 0) {
                

                  $rs = $query->row();

                  $id = $rs->driver_id;

                  $data = "SELECT * FROM driver_document WHERE driver_id = '$id'";

                  $query = $this->db->query($data);

                  //echo $this->db->last_query();

                  $result = $query->result_array();

                  $array_type = array();

                  foreach($result as $rs) {

                        $array_type[] = $rs['type'];

                  }

                  $dr_doc = array();

                  for ($i = 1; $i <= 6; $i++) {

                        if (in_array($i, $array_type)) {

                              //

                        } else {

                              $dr_doc[] = array('driver_id' => $id,

                                          'type' => $i);

                        }

                  }

                  if (!empty($dr_doc)) {

                        $this->db->insert_batch('driver_document', $dr_doc);

                        $data = "SELECT * FROM driver_document WHERE driver_id = '$id'";

                        $query = $this->db->query($data);

                        //echo $this->db->last_query();

                        $result = $query->result_array();
                        //print_r($result);

                  }

                  foreach($result as $rs) {

                        if ($rs['status'] != 0) {

                              $is_uploaded = 'true';

                        } else {

                              $is_uploaded = 'false';

                        }

                        // print_r($rs['type']);
                        $name = get_document_name($rs['type']);

                        $new_array = array('id' => $rs['id'],

                                    'type' => (int)$rs['type'],

                                    'document_status' => (int)$rs['status'],

                                    'is_uploaded' => filter_var($is_uploaded, FILTER_VALIDATE_BOOLEAN),

                                    'name' => $name,

                                    'document_url' => $rs['image']);

                        $result_array[] = $new_array;

                         # code...

                  }

                  // echo $this->db->last_query();

                  // $result[] =

                  // if ($result['status'] != '0'){


                  //     $is_uploaded = 'false';


                  //  }else{


                  //      $is_uploaded = 'true';

                  //  }

                  //print_r($result_array);

                  return $result_array;

            } else {

                  return false;

            }

      }

      function type_driver($request) {

            $query = $this->db->where('unique_id', $request['auth'])->get('driver_auth_table');

            if ($query->num_rows() > 0) {

                  $rs = $query->row();

                  $driv_id = $rs->driver_id;

                  $result = $this->db->where('id', $driv_id)->update('drivers', array('driver_type' => $request['driver_type']));

                  return true;

            } else {

                  return false;

            }

      }

      

      function photo_upload($request) {

            //print_r($request);

            $query = $this->db->where('unique_id', $request['auth'])->get('driver_auth_table');

            if ($query->num_rows() > 0) {

                  $rs = $query->row();

                  $data = array('image' => $request['image']);

                  $this->db->where('id', $rs->driver_id)->update('drivers', $data);

                  return true;

            } else {

                  return false;

            }

      }



     


      
      public function start_trip($request) {

            // print_r($request);


            $query = $this->db->where('unique_id', $request['auth'])->get('driver_auth_table');

            // echo $this->db->last_query();

            if ($query->num_rows() > 0) {

                  $id = $request['trip_id'];

                  $start_time = time();
                   $trip_start_time = time();

                  $result = $this->db->where('id', $id)->update('booking', array('status' => '2', 'start_time' => $start_time,'trip_start_time' => $trip_start_time));

                  //  echo $this->db->last_query();

                  return $result;

            } else {

                  return false;

            }

      }

      public function help_pages($request) {

            $id = $request['id'];

            $query = $this->db->where('unique_id', $request['auth'])->get('driver_auth_table');

            if ($query->num_rows() > 0) {

                  $data = "SELECT * FROM help_table WHERE id ='$id' ";

                  $query = $this->db->query($data);

                  $rs = $query->row();

                  return $result = array('id' => $rs->id, 'title' => $rs->head, 'icon' => $rs->image, 'content' => $rs->content);

            } else {

                  return false;

            }

      }

      function is_help_status($driv_id, $id) {

            $data = $this->db->query("SELECT help_status AS is_helpful FROM `help_review` WHERE driver_id = '$driv_id' AND help_id = '$id' ")->row();

            //return $data->is_helpful;

            return filter_var($data->is_helpful, FILTER_VALIDATE_BOOLEAN);

      }

      public function help_list($request) {

            $query = $this->db->where('unique_id', $request['auth'])->get('driver_auth_table');

            if ($query->num_rows() > 0) {

                  $data = "SELECT id AS id,head  AS title,image AS icon FROM help_table WHERE status = 1 ORDER BY id ASC";

                  $query = $this->db->query($data);

                  $result = $query->result_array();

                  return $result;

            } else {

                  return false;

            }

      }

      function help_review($request) {

            $query = $this->db->where('unique_id', $request['auth'])->get('driver_auth_table');

            if ($query->num_rows() > 0) {

                  $rs = $query->row();

                  $driv_id = $rs->driver_id;

                  $data = array('help_status' => filter_var($request['is_helpful'], FILTER_VALIDATE_BOOLEAN), 'help_id' => $request['id'], 'driver_id' => $driv_id);

                  $this->db->insert('help_review', $data);

                  return true;

            } else {

                  return false;

            }

      }

      function update_vehicle($request) {

            $query = $this->db->where('unique_id', $request['auth'])->get('driver_auth_table');

            if ($query->num_rows() > 0) {

                  $rs = $query->row();

                  $data = array('model' => $request['car_model'], 'max_seat' => $request['seats_available'], 'vehicle_reg_num' => $request['vehicle_registration_number'], 'car_owner' => $request['car_owner']);

                  $this->db->where('driv_id', $rs->driver_id)->update('car', $data);

                  return true;

            } else {

                  return false;

            }

      }

      function update_settings($request) {

            $query = $this->db->where('unique_id', $request['auth'])->get('driver_auth_table');

            if ($query->num_rows() > 0) {

                  $rs = $query->row();

                  $data = array('is_deaf' => filter_var($request['is_deaf'], FILTER_VALIDATE_BOOLEAN), 'is_flash_required' => filter_var($request['is_flash_required_for_requests'], FILTER_VALIDATE_BOOLEAN));

                  $this->db->where('id', $rs->driver_id)->update('drivers', $data);

                  return true;

            } else {

                  return false;

            }

      }

      function fetch_settings($request) {

            $query = $this->db->where('unique_id', $request['auth'])->get('driver_auth_table');

            if ($query->num_rows() > 0) {

                  $rs = $query->row();

                  $driv_id = $rs->driver_id;

                  $data1 = "SELECT * FROM drivers WHERE id = '$driv_id' ";

                  $query1 = $this->db->query($data1);

                  $rs = $query1->row();

                  //print_r($rs->is_flash_required);

                  //echo $this->db->last_query();

                  return $result = array('status' => 'success', 'is_deaf' => $rs->is_deaf, 'is_flash_required_for_requests' => $rs->is_flash_required);

            } else {

                  return false;

            }

      }



      function req_details($request) {

            $query = $this->db->where('unique_id', $request['auth'])->get('driver_auth_table');
            if(!empty($query) && !empty($driver_data = $query->row())) {

                  $id = $request["request_id"];
                  $driver_id = $driver_data->driver_id;
                  $type = isset($request["type"]) && !empty($request["type"]) ? 1 : 3 ;

                  $query = "SELECT TD.pickup_location AS source_address,TD.drop_location AS hospital_address,
                                   CUST.profile_image AS photo,TD.drop_lat,TD.drop_lng,
                                   TD.created_date AS request_time,
                                   CONCAT(CUST.first_name,' ',CUST.last_name) AS name
                            FROM transport_details AS TD
                            INNER JOIN customers CUST ON (CUST.customer_id=TD.customer_id)
                            WHERE TD.transport_id='$id' AND TD.status != '2'";
                  $data = $this->db->query($query);
                  $drvLoc = $this->db->query("SELECT lat_driver,lng_driver 
                                              FROM drivers WHERE driver_id='$driver_id'")->row_array();

                  if(empty($data) || empty($data = $data->row_array()) || empty($data['drop_lat']) || 
                     empty($data['drop_lng']) || empty($drvLoc['lat_driver']) || empty($drvLoc['lng_driver'])){
                        return 0;
                  }

                  $settings = getSettings();
                  $key = $settings['google_api_key'];
                  $cor = $drvLoc['lat_driver'].",".$drvLoc['lng_driver']."&destinations=".
                         $data['drop_lat'].",".$data['drop_lng'];
                  $url = "https://maps.googleapis.com/maps/api/distancematrix/json?units=imperial&origins=".
                          $cor."&mode=driving&key=".$key;

                  $ch = curl_init();
                  curl_setopt($ch, CURLOPT_URL, $url);
                  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
                  curl_setopt($ch, CURLOPT_PROXYPORT, 3128);
                  curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
                  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
                  $response = curl_exec($ch);
                  curl_close($ch);
                  $response = json_decode($response, true);

                  if(empty($response) || 
                    !isset($response['rows'],
                           $response['rows'][0],
                           $response['rows'][0]['elements'],
                           $response['rows'][0]['elements'][0],
                           $response['rows'][0]['elements'][0]['status'],
                           $response['rows'][0]['elements'][0]['distance'],
                           $response['rows'][0]['elements'][0]['duration'],
                           $response['rows'][0]['elements'][0]['distance']['text'],
                           $response['rows'][0]['elements'][0]['duration']['text']) || 
                    $response['rows'][0]['elements'][0]['status'] != 'OK'){
                        return 0;
                  }
                  $data['type'] = $type == 3 ? 1 : 0;
                  $data['request_time'] = strtotime($data['request_time']);
                  $data['time'] = $response['rows'][0]['elements'][0]['duration']['text'];
                  $data['distance'] = $response['rows'][0]['elements'][0]['distance']['text'];
                  unset($data['drop_lat'],$data['drop_lng']);

                  return $data;

            } else {

                  return false;

            }

      }
      function car_type_image($id) {

            $data = $this->db->query("SELECT image AS image FROM `car_type` WHERE id = '$id' ")->row();

            // echo $this->db->last_query();

            return $data->image;

      }

      //  }


      function car_type($id) {

            //  $data = $this->db->query("SELECT car_type  FROM `request` WHERE id = '$id' ")->row();


            //$car_type_id =  $data->car_type;

            $data = $this->db->query("SELECT name  FROM `car_type` WHERE id = '$id' ")->row();

            //echo $this->db->last_query();

            return $data->name;

      }

      public function summary_trip($request) {

            $id = $request['trip_id'];

            //$currency = '&#8377';


            $data = "SELECT booking.id,booking.status AS trip_status,booking.user_id AS customer_id,CONCAT(pattern.currency,'',booking.fare) AS fare,

                  CONCAT(pattern.currency,'',booking.tax) AS tax,CONCAT(pattern.currency,'',booking.fee) as fee,CONCAT(pattern.currency,'',booking.discount) AS rider_discount,

                  CONCAT(pattern.currency,'',booking.payout) AS estimated_payout,CONCAT(pattern.currency,'',booking.base_fare) as base_fare ,booking.time AS duration,booking.payment_mode,

                  ROUND(booking.distance, 2) AS distance FROM booking LEFT JOIN pattern ON booking.pattern_id = pattern.id WHERE booking.id = '$id'  ";

            // $query1 =$this->db->query($data)->result();

            $query1 = $this->db->query($data)->row();

          //  echo $this->db->last_query();

            // print_r($query1);


            return $query1;

      }

      
       
       
      

      function confirm_arrival($request) {

            $query = $this->db->where('unique_id', $request['auth'])->get('driver_auth_table');

            if ($query->num_rows() > 0) {

                  $data = array('car_arrival' => '1');

                  $this->db->where('id', $request['trip_id'])->update('booking', $data);

                  return true;

            } else {

                  return false;

            }

      }

      function confirm_cash($request) {

            $query = $this->db->where('unique_id', $request['auth'])->get('driver_auth_table');

            if ($query->num_rows() > 0) {

                  $rs = $query->row();
                  $driv_id = $rs->driver_id;
                  $data = array(' cash_collection' => '1','payment_status' =>'1');

             //     $this->db->where('id', $request['trip_id'] && 'driver_id', $driv_id)->update('booking', $data);
             $this->db->where('id', $request['trip_id'] )->update('booking', $data);
             
                
                  return true;

            } else {

                  return false;

            }

      }





 public function ride_feedback($request) {

            $query = $this->db->where('unique_id', $request['auth'])->get('driver_auth_table');

            if ($query->num_rows() > 0) {
            
                  $rs = $query->row();

                  $driv_id = $rs->driver_id;
                 
                  $data = "SELECT feedback.rating AS rating,feedback.id,feedback.bad_feedback AS issue,feedback.comments AS customer_comment,feedback.cust_id AS customer_id,feedback.trip_id AS trip_id FROM feedback WHERE driver_id = '$driv_id'";
                  $query1 = $this->db->query($data)->result();
                  foreach($query1 as $result12)
                  {
                        if($result12->rating >=3)
                        {
                               $issue = "";
                        }
                        else{
                               $issue = $result12->customer_comment;
                        }
                               $result123[] = array(
                            
                              
                               'id'=>$result12->id,
                               'issue'=>$issue,
                               'customer_comment'=>$result12->customer_comment,
                               'customer_id'=>$result12->customer_id,
                               'trip_id'=>$result12->trip_id
                                          );
                  }
                  
                  return $result123;


            } else {

                  return false;

            }

      }
      public function ride_feedback_old($request) {

            $query = $this->db->where('unique_id', $request['auth'])->get('driver_auth_table');

            if ($query->num_rows() > 0) {

                  $rs = $query->row();

                  $driv_id = $rs->driver_id;
                  //  print_r($driv_id);
                  //$data = "SELECT feedback.id,feedback.bad_feedback AS issue,feedback.driver_feedback AS customer_comment,feedback.cust_id AS customer_id,feedback.trip_id AS trip_id FROM feedback WHERE driver_id = '$driv_id'";


                  // $data = "SELECT feedback.id,IF(feedback.trip_report!='', feedback.trip_report, feedback.bad_feedback) AS issue,feedback.driver_feedback AS customer_comment,feedback.cust_id AS customer_id,feedback.trip_id AS trip_id FROM feedback WHERE driver_id = '$driv_id' AND feedback.driver_feedback!='' ORDER BY booking.id DESC ";


                  $data = "SELECT feedback.id,feedback.bad_feedback AS issue,feedback.driver_feedback AS customer_comment,feedback.cust_id AS customer_id,feedback.trip_id AS trip_id FROM feedback WHERE driver_id = '$driv_id' AND feedback.driver_feedback!=''";
                  $query1 = $this->db->query($data)->result();
                   //print_r($this->db->last_query());exit;
                  $query1 = $this->db->query($data)->result();

                  return $query1;

            } else {

                  return false;

            }

      }

      // public function feedback_comments($request){


      //     $query = $this->db->where('unique_id',$request['auth'])->get('driver_auth_table');

      //     if($query->num_rows()>0){

      //         $rs = $query->row();

      //         $driv_id = $rs->driver_id;

      //         $data = "SELECT feedback.id,feedback.driver_feedback AS customer_comment,feedback.cust_id AS customer_id,feedback.trip_id AS trip_id,feedback.rating AS rating FROM feedback WHERE driver_id = '$driv_id'";

      //         $query1 =$this->db->query($data)->result();


      //         return $query1;

      //     }else{

      //         return false;

      //     }

      // }








      public function feedback_comments($request) {

            $query = $this->db->where('unique_id', $request['auth'])->get('driver_auth_table');

            if ($query->num_rows() > 0) {

                  $rs = $query->row();

                  $driv_id = $rs->driver_id;

                  $data = "SELECT feedback.id,feedback.comments AS customer_comment,

                        feedback.trip_id,feedback.cust_id AS customer_id,feedback.trip_id AS trip_id,booking.start_time AS time,

                        feedback.rating AS rating FROM feedback INNER JOIN booking ON feedback.trip_id = booking.id WHERE feedback.driver_id = '$driv_id' AND feedback.rating >=3 ORDER BY booking.id DESC ";

                  $query1 = $this->db->query($data)->result();


                  return $query1;

            } else {

                  return false;

            }

      }


      public function feedback_comments_old($request) {

            $query = $this->db->where('unique_id', $request['auth'])->get('driver_auth_table');

            if ($query->num_rows() > 0) {

                  $rs = $query->row();

                  $driv_id = $rs->driver_id;

                  $data = "SELECT feedback.id,feedback.driver_feedback AS customer_comment,

                        feedback.trip_id,feedback.cust_id AS customer_id,feedback.trip_id AS trip_id,booking.start_time AS time,

                        feedback.rating AS rating FROM feedback INNER JOIN booking ON feedback.trip_id = booking.id WHERE feedback.driver_id = '$driv_id' AND feedback.driver_feedback!='' ORDER BY booking.id DESC ";

                  $query1 = $this->db->query($data)->result();

                  //echo $this->db->last_query();

                  return $query1;

            } else {

                  return false;

            }

      }

      public function rating($request) {

            $query = $this->db->where('unique_id', $request['auth'])->get('driver_auth_table');

            if ($query->num_rows() > 0) {

                  $rs = $query->row();

                  $driv_id = $rs->driver_id;

                  // print_r($driv_id);

                  //$data = "SELECT count(*) AS total_rating,AVG(feedback.rating) AS average_rating FROM feedback WHERE driver_id = '$driv_id'";

                  $data = "SELECT count(*) AS total_ratings FROM feedback WHERE driver_id = '$driv_id' AND rating > 0";

                  // COALESCE(sum(balance),0)

                  $query = $this->db->query($data);

                  //echo $this->db->last_query();

                  //echo $this->db->last_query();

                  $result = $query->row();

                  //$rolltext = (int)implode( $result->average_rating);

                  // print_r($rolltext);

                  //var_dump($myVar)


                  return $result;

            } else {

                  return false;

            }

      }

      function avg_rating($driv_id) {

            //$data = $this->db->query("SELECT COALESCE(AVG(feedback.rating),0) AS average_rating FROM `feedback` WHERE driver_id = '94' ")->row();

            $data = $this->db->query("SELECT AVG(feedback.rating) AS average_rating FROM `feedback` WHERE driver_id = '$driv_id' AND rating > 0")->row();

            //echo $this->db->last_query();

            return $data->average_rating;

      }

      function num_rides($driv_id) {

            $data = $this->db->query("SELECT count(id) AS total_requests FROM `driver_request` WHERE driver_id = '$driv_id'")->row();

            return $data->total_requests;

      }

      function num_requests($driv_id) {

            $data = $this->db->query("SELECT count(id) AS requests_accepted FROM `request` WHERE driver_id = '$driv_id' AND status = 1")->row();

            return $data->requests_accepted;

      }

      function num_trips($driv_id) {

            $data = $this->db->query("SELECT count(id) AS total_trips FROM `booking` WHERE driver_id = '$driv_id'")->row();

            return $data->total_trips;

      }

      function num_cancelled($driv_id) {

            $data = $this->db->query("SELECT count(id) AS trips_cancelled FROM `booking` WHERE driver_id = '$driv_id' AND status = 0")->row();

            return $data->trips_cancelled;

      }

      function tripdetails($request) {

            $id = $request["trip_id"];

            //print_r($id);

            // $data = "SELECT driver.id,driver.driver_name AS driver_name,driver.image AS driver_photo,booking.id,

            // booking.status AS trip_status,booking.driver_id,booking.source AS source_location,booking.source_lat AS source_latitude,

            //         booking.source_lng AS source_longitude,booking.destination AS destination_location,

            //         booking.destination_lat AS destination_latitude,

            //         booking.destination_lng AS destination_longitude, IF(booking.start_time='',booking.book_date,booking.start_time) AS start_time,booking.end_time AS end_time,

            //         CONCAT(pattern.currency,'',booking.fare) AS fare,CONCAT(ROUND(booking.time,2),' ','hrs') AS duration,CONCAT(ROUND(booking.distance,3),' ','KM') AS distance,booking.status AS trip_status,

            //         CONCAT(pattern.currency,'',booking.fee) AS fee,CONCAT(pattern.currency,'',booking.tax) AS tax,

            //         CONCAT(pattern.currency,'',booking.payout) AS estimated_payout,customer.id AS customer_id,

            //         customer.name AS customer_name,customer.image AS customer_photo FROM

            //         booking LEFT JOIN driver ON driver.id = booking.driver_id LEFT JOIN customer ON booking.user_id = customer.id

            //         LEFT JOIN pattern ON booking.pattern_id = pattern.id WHERE booking.id = '$id'";


            $data = "SELECT driver.id,driver.driver_name AS driver_name,driver.image AS driver_photo,booking.id,

                  booking.status AS trip_status,booking.driver_id,booking.source AS source_location,booking.source_lat AS source_latitude,

                  booking.source_lng AS source_longitude,booking.destination AS destination_location,

                  booking.destination_lat AS destination_latitude,

                  booking.destination_lng AS destination_longitude, IF(booking.start_time='',booking.book_date,booking.start_time) AS start_time,booking.end_time AS end_time,

                  CONCAT(pattern.currency,'',ROUND(booking.fare,2)) AS fare,CONCAT(ROUND(booking.time,2),' ','hrs') AS duration,CONCAT(ROUND(booking.distance,3),' ','KM') AS distance,booking.status AS trip_status,

                  CONCAT(pattern.currency,'',ROUND(booking.fee,2)) AS fee,CONCAT(pattern.currency,'',ROUND(booking.tax,2)) AS tax,

                  CONCAT(pattern.currency,'',ROUND(booking.payout,2)) AS estimated_payout,customer.id AS customer_id,

                  customer.name AS customer_name,customer.image AS customer_photo FROM

                  booking LEFT JOIN drivers ON driver.id = booking.driver_id LEFT JOIN customer ON booking.user_id = customer.id

                  LEFT JOIN pattern ON booking.pattern_id = pattern.id WHERE booking.id = '$id'";

            $query = $this->db->query($data);

            $result = $query->row();
             //print_r($result);exit;
            return $result;

      }

      function driver_rate($trip_id) {

            $query = $this->db->query("SELECT feedback.rating AS rate FROM `feedback` WHERE trip_id = $trip_id")->row();

            return $query->rate;

      }

      //     function history_trips($request){

      // //echo "string";

      //         $query = $this->db->where('unique_id',$request['auth'])->get('driver_auth_table');

      //         if($query->num_rows()>0){

      //             $rs = $query->row();

      //             $driv_id = $rs->driver_id;

      //             //print_r($driv_id);

      //             // $data = "SELECT driver.id,driver.driver_name AS driver_name,driver.image AS driver_photo,

      //             // booking.id,booking.status AS trip_status,booking.driver_id,booking.source AS source_location,

      //             // booking.source_lat AS source_latitude,booking.source_lng AS source_longitude,

      //             // booking.destination AS destination_location,booking.destination_lat AS destination_latitude,

      //             // booking.destination_lng AS destination_longitude,booking.start_time AS start_time,

      //             // booking.end_time AS end_time,booking.fare AS fare,booking.time AS duration,booking.distance AS distance,

      //             // booking.status AS trip_status ,booking.fee AS fee,booking.tax AS tax,booking.payout AS estimated_payout,

      //             // customer.id AS customer_id,customer.name AS customer_name,

      //             // customer.image AS customer_photo FROM booking

      //             // LEFT JOIN driver ON driver.id = booking.driver_id LEFT JOIN customer ON booking.user_id = customer.id

      //             // WHERE booking.driver_id = '$driv_id'";


      //             $query = "SELECT driver.id,driver.driver_name AS driver_name,driver.image AS driver_photo,

      //             booking.id,booking.status AS trip_status,booking.driver_id,booking.source AS source_location,

      //             booking.source_lat AS source_latitude,booking.source_lng AS source_longitude,

      //             booking.destination AS destination_location,booking.destination_lat AS destination_latitude,

      //             booking.destination_lng AS destination_longitude,booking.start_time AS start_time,

      //             booking.end_time AS end_time,booking.fare AS fare,booking.time AS duration,booking.distance AS distance,

      //             booking.status AS trip_status ,booking.fee AS fee,booking.tax AS tax,booking.payout AS estimated_payout,

      //             customer.id AS customer_id,customer.name AS customer_name,

      //             customer.image AS customer_photo FROM booking

      //             LEFT JOIN driver ON driver.id = booking.driver_id LEFT JOIN customer ON booking.user_id = customer.id

      //             WHERE booking.driver_id = '$driv_id'";

      // //echo $this->db->last_query();

      //            // $total = $this->db->query->num_rows();


      //             return $query;

      //             //return $data;

      //         }else{

      //             return false;

      //         }

      //     }


     

      function trip_rate($id) {

            $query = $this->db->query("SELECT feedback.rating AS rate FROM `feedback` WHERE id = '$id'")->row();

            return $query->rate;

      }

      function total_rides_history($driv_id) {

            $query = $this->db->query("SELECT count(id)  AS rides FROM booking WHERE driver_id = '$driv_id'")->row();

            return $query->rides;

      }

      function total_online_time($driv_id) {

            $query = $this->db->query("SELECT * FROM driver_online WHERE driver_id = '$driv_id'")->result();

            //echo $this->db->last_query();

            $total_time = 0;

            foreach($query as $rs) {

                  $start_time = $rs->sign_in;

                  if ($rs->sign_out != '') {

                        $end_time = $rs->sign_out;

                  } else {

                        if ($rs->cur_date == date('Y-m-d')) {

                              $end_time = time();

                        } else {

                              $end_time = strtotime($rs->cur_date.' 23:59:59');

                        }

                  }

                  $end_time = $rs->sign_out != '' ? $rs->sign_out : time();

                  $total_time += $end_time - $start_time;

            }

            $dateDiff = intval(($total_time) / 60);

            $hours = intval($dateDiff / 60);

            $minutes = $dateDiff % 60;

            // $start =  date('m/d/Y H:i:s', $start_time);

            // $end =  date('m/d/Y H:i:s', $end_time);


            /*$interval  = abs($end_time - $start_time)/1000;

            $minutes   = round($interval / 60);

            $min = $minutes;*/

            //$hours = floor($min / 60).':'.($min -   floor($min / 60) * 60);

            return $hours.":".$minutes;

      }

      // function total_fare($driv_id){


      //     $query = $this->db->query("SELECT SUM(fare)  AS fare FROM booking WHERE driver_id = '$driv_id'")->row();

      //     return $query->fare;

      //     echo $this->db->last_query();


      // }


      function total_fare($driv_id) {

            $data1 = $this->db->query("SELECT pattern_id FROM booking WHERE driver_id = $driv_id ")->row();

            $pattern = $data1->pattern_id;

            //  $query = $this->db->query("SELECT CONCAT(patternSUM(fare) AS fare FROM booking WHERE driver_id = '$driv_id'")->row();

            $query = $this->db->query("SELECT CONCAT(pattern.currency,'',SUM(fare)) AS fare,pattern_id   FROM booking LEFT JOIN pattern ON booking.pattern_id = pattern.id WHERE driver_id = '$driv_id' ")->row();

            //echo $this->db->last_query();

            if (count($query) > 0) {

                  return $query->fare;

            } else {

                  return 0;

            }

            //echo $this->db->last_query();


      }

      function today_trips($request, $start_time, $end_time) {

            $query = $this->db->where('unique_id', $request['auth'])->get('driver_auth_table');

            if ($query->num_rows() > 0) {

                  $rs = $query->row();

                  $driv_id = $rs->driver_id;

                  // $data = "SELECT driver.id,driver.driver_name AS driver_name,driver.image AS driver_photo,

                  // booking.id,booking.status AS trip_status,booking.driver_id,booking.source AS source_location,

                  // booking.source_lat AS source_latitude,booking.source_lng AS source_longitude,

                  // booking.destination AS destination_location,booking.destination_lat AS destination_latitude,

                  // booking.destination_lng AS destination_longitude,booking.start_time AS start_time,

                  // booking.end_time AS end_time,booking.fare AS fare,booking.time AS duration,booking.distance AS distance,

                  // booking.status AS trip_status ,booking.fee AS fee,booking.tax AS tax,booking.payout AS estimated_payout,customer.id AS customer_id,customer.name AS customer_name,

                  // customer.image AS customer_photo FROM booking

                  // LEFT JOIN driver ON driver.id = booking.driver_id LEFT JOIN customer ON booking.user_id = customer.id

                  // WHERE booking.driver_id = '$driv_id' AND booking.book_date BETWEEN $start_time AND $end_time";


                  //       $query = "SELECT driver.id,driver.driver_name AS driver_name,driver.image AS driver_photo,

                  //      booking.id,booking.status AS trip_status,booking.driver_id,booking.source AS source_location,

                  //      booking.source_lat AS source_latitude,booking.source_lng AS source_longitude,

                  //      booking.destination AS destination_location,booking.destination_lat AS destination_latitude,

                  //      booking.destination_lng AS destination_longitude,booking.start_time AS start_time,

                  //      booking.end_time AS end_time,booking.fare AS fare,booking.time AS duration,booking.distance AS distance,

                  //      booking.status AS trip_status ,booking.fee AS fee,booking.tax AS tax,booking.payout AS estimated_payout,customer.id AS customer_id,customer.name AS customer_name,

                  //      customer.image AS customer_photo FROM booking

                  //      LEFT JOIN driver ON driver.id = booking.driver_id LEFT JOIN customer ON booking.user_id = customer.id

                  //      LEFT JOIN pattern ON booking.pattern_id = pattern.id WHERE booking.driver_id = '$driv_id' AND booking.book_date BETWEEN $start_time AND $end_time";

                  // // echo $this->db->last_query();


                  $query = "SELECT driver.id,driver.driver_name AS driver_name,driver.image AS driver_photo,

                        booking.id,booking.status AS trip_status,booking.driver_id,booking.source AS source_location,

                        booking.source_lat AS source_latitude,booking.source_lng AS source_longitude,

                        booking.destination AS destination_location,booking.destination_lat AS destination_latitude,

                        booking.destination_lng AS destination_longitude,booking.start_time AS start_time,

                        booking.end_time AS end_time,CONCAT(pattern.currency,'',booking.fare) AS fare,

                        booking.time AS duration,booking.distance AS distance,

                        booking.status AS trip_status ,CONCAT(pattern.currency,'',booking.fee) AS fee,CONCAT(pattern.currency,'',booking.tax) AS tax,

                        CONCAT(pattern.currency,'',booking.payout) AS estimated_payout,customer.id AS customer_id,customer.name AS customer_name,

                        customer.image AS customer_photo FROM booking

                        LEFT JOIN drivers ON driver.id = booking.driver_id LEFT JOIN customer ON booking.user_id = customer.id

                        LEFT JOIN pattern ON booking.pattern_id = pattern.id WHERE booking.driver_id = '$driv_id' AND booking.book_date BETWEEN $start_time AND $end_time AND booking.status != 0";

                  return $query;

            } else {

                  return false;

            }

      }

      function totalfare_today($start_time, $end_time, $driv_id) {

            $data1 = $this->db->query("SELECT pattern_id FROM booking WHERE driver_id = $driv_id ")->row();

            $pattern = $data1->pattern_id;

            // $data2 = $this->db->query("SELECT currency FROM pattern WHERE id = $pattern ")->row();

            // $currency = $data2->currency;


            // print_r($currency);

            //  $query = $this->db->query("SELECT SUM(fare)  AS fare FROM booking WHERE driver_id = '$driv_id' AND book_date BETWEEN $start_time AND $end_time")->row();

            $query = $this->db->query("SELECT CONCAT(pattern.currency,'',SUM(fare)) AS fare,pattern_id   FROM booking LEFT JOIN pattern ON booking.pattern_id = pattern.id WHERE driver_id = '$driv_id' AND book_date BETWEEN $start_time AND $end_time")->row();

            return $query->fare;

      }

      // function total_rides($driv_id){

      //     $date = strtotime(date('y-m-d'));

      //     $query = $this->db->query("SELECT (count(id)  AS rides FROM booking WHERE driver_id = '$driv_id' AND book_date = '$date' ")->row();

      //     return $query->rides;


      // }


      function total_rides($start_time, $end_time, $driv_id) {

            //print_r($end_time);

            //print_r($end_time);

            $query = $this->db->query("SELECT (count(id))  AS rides FROM booking WHERE driver_id = '$driv_id' AND book_date BETWEEN $start_time AND $end_time")->row();

            //echo $this->db->last_query();

            return $query->rides;

            //$query = $this->db->query("SELECT SUM(fare)  AS fare FROM booking WHERE driver_id = '$driv_id' AND book_date BETWEEN $start_time AND $end_time")->row();

            // return $query->fare;


      }

      //     function total_online_time($driv_id){


      //         $query = $this->db->query("SELECT *  FROM driver_online WHERE driver_id = '$driv_id'")->row();


      // //echo $this->db->last_query();

      //         $start_time = $query->sign_in;

      //         $end_time = $query->sign_out;


      //         // $start =  date('m/d/Y H:i:s', $start_time);

      //         // $end =  date('m/d/Y H:i:s', $end_time);


      //         $interval  = abs($end_time - $start_time);

      //         $minutes   = round($interval / 60);

      //         $min = $minutes;


      //         $hours = floor($min / 60).':'.($min -   floor($min / 60) * 60);

      //         return $hours;


      //     }


      function message($request) {

            $id = $request;
            
            $fcm_data = array('id' => $id, 'title' => 'NEMT', 'message' => 'Trip Completed');

            $data = array('status ' => '6');

            $this->db->where('transport_id', $id)->update('transport_details', $data);

            $data = "SELECT * FROM transport_details WHERE transport_id = '$id' ";

            $query = $this->db->query($data);

            $rs = $query->row();

            $cust_id = $rs->customer_id;

            $data2 = "SELECT * FROM customers WHERE customer_id = '$cust_id' ";

            $query = $this->db->query($data2);

            $rs2 = $query->row();

            $fcm = $rs2->fcm_token;

            $this->push_sent($fcm, $fcm_data);

      }

   

      function push_sent($fcm_token, $fcm_data) {

            $data1 = "SELECT * FROM setting WHERE id = '1' ";

            $query1 = $this->db->query($data1);

            $rs = $query1->row();

            $key = $rs->google_api_key;
           
            $data = "{ \"notification\": { \"title\": \"".$fcm_data['title']."\", \"text\": \"".$fcm_data['message']."\" , \"sound\": \"ringtone_user\" }, \"time_to_live\": 60, \"data\" : {\"response\" : {\"status\" : \"success\", \"data\" : {\"id\" : \"".$fcm_data['id']."\"}}}, \"collapse_key\" : \"trip\", \"priority\":\"high\", \"to\" : \"".$fcm_token."\"}";

            $ch = curl_init("https://fcm.googleapis.com/fcm/send");

            $header = array('Content-Type: application/json', 'Authorization: key='.$key);

            curl_setopt($ch, CURLOPT_HTTPHEADER, $header);

            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

            curl_setopt($ch, CURLOPT_POST, 1);

            curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

            $out = curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

            curl_exec($ch);

            curl_close($ch);

      }
  
      public function fare_calculate($request, $trip_id) {
            
            if (!empty($trip_id)) {

                  if ($trip_id != 0) {

                        $distance = $request['trip_distance'];

                        $time = $request['total_time'];

                        $rs = $this->cal_baseRate();    

                        if ($rs) {
                              

                              $fare_cal = $rs->base_price + ($rs->km_rate * $distance);

                              $least_min = $time * $rs->min_rate; //total minute rate
                                                        
                              $min_fare = $fare_cal + $least_min; // total fare calculated

                              $extra_cost = 0;

                              $min_fare = floor($min_fare + $extra_cost);

                              $fare = $min_fare;
                                    
                              $sub_total = $fare;

                              //echo json_encode($sub_total);exit();
                              
                              $setting = $this->db->get('setting')->row();

                              $fee = (($fare * $setting->admin_charge) / 100);

                              $tax = (($fare * $setting->tax) / 100);

                              $driver_charge = $fare - ($fee + $tax);

                              $data = array('base_fare' => $rs->base_price, 'km_fare' => $rs->km_rate * $distance, 'min_fare' => $least_min, 'sub_total_fare' => $sub_total, 'trip_cost' => $fare, 'fee' => $fee, 'payout' => $driver_charge, 'tax' => $tax );

                              $this->db->where('transport_id', $trip_id)->update('transport_details', $data);

                              $sql = $this->db->query("SELECT driver_id FROM transport_details WHERE transport_id = '$trip_id'")->row();
                              
                              $this->db->where('driver_id', $sql->driver_id)->update('drivers', array('book_status'=>0));    

                              return $min_fare;

                        }

                       
                                

                  }

            }

      }
           

      

      
      

      function getDistance($latitude1, $longitude1, $latitude2, $longitude2) {

            $earth_radius = 6371;

            $dLat = deg2rad($latitude2 - $latitude1);

            $dLon = deg2rad($longitude2 - $longitude1);

            $a = sin($dLat / 2) * sin($dLat / 2) + cos(deg2rad($latitude1)) * cos(deg2rad($latitude2)) * sin($dLon / 2) * sin($dLon / 2);

            $c = 2 * asin(sqrt($a));

            $d = $earth_radius * $c;

            return $d;

      }

      function cal_baseRate() {

                  $data1 = "SELECT * FROM setting WHERE id = '1' ";

                  $query1 = $this->db->query($data1);

                  $rs = $query1->row();
                  
                  return $rs;
      }

     

      function push_sent_cancel($fcm_token, $fcm_data) {
            $data1 = "SELECT * FROM settings WHERE id = '1' ";
            $query1 = $this->db->query($data1);
            $rs = $query1->row();
            $key = $rs->key;

            $data = "{ \"notification\": { \"title\": \"".$fcm_data['title']."\", \"text\": \"".$fcm_data['message']."\", \"sound\": \"ringtone_driver\" }, \"time_to_live\": 60, \"data\" : {\"response\" : {\"status\" : \"success\", \"data\" : {\"trip_id\" : \"".$fcm_data['id']."\", \"trip_status\" : 0}}}, \"collapse_key\" : \"trip\", \"priority\":\"high\", \"to\" : \"".$fcm_token."\"}";

            $ch = curl_init("https://fcm.googleapis.com/fcm/send");

            $header = array('Content-Type: application/json', 'Authorization: key='.$key);

            curl_setopt($ch, CURLOPT_HTTPHEADER, $header);

            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

            curl_setopt($ch, CURLOPT_POST, 1);

            curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

            $out = curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            
            curl_exec($ch);
            curl_close($ch);

      }


       public function get_trip_info($trip_id='') {

            if($trip_id)
            {
                  $data1 = "SELECT * FROM setting WHERE id = '1' ";

                  $query1 = $this->db->query($data1);

                  $rs = $query1->row();

                  $currency = $rs->currency;

                  $rs = $this->db->query("SELECT t.transport_id AS trip_id,(CASE t.status WHEN 9 THEN 'cancelled' WHEN 3 THEN 'booking' WHEN 5 THEN 'inprocess' WHEN 6 THEN 'completed' ELSE 'Invalid' END) AS trip_status,t.trip_distance AS distance, CONCAT(t.trip_cost,' ','$currency') AS fare, t.pickup_location AS source_location, t.pickup_lat AS source_latitude, t.pickup_lng AS source_longitude, t.drop_location AS destination_location, t.drop_lat AS destination_latitude, t.drop_lng AS destination_longitude, c.profile_image AS customer_photo, CONCAT(c.first_name,' ',c.last_name) AS customer_name FROM `transport_details` AS t LEFT JOIN customers AS c ON t.customer_id = c.customer_id WHERE t.transport_id =".$trip_id)->row();
                        if ($rs) {
                              return $rs;
                        } else {
                              return false;
                        }
            }else{
                  return false;
            }
      }

      public function update_ride_start($data = array()) {
            $status = 0;
            if(!empty($data) && isset($data['auth']) && !empty($data['auth']) && 
               isset($data['trip_id']) && !empty($data['trip_id'])){

                  $drvAuth = $this->db->where('unique_id', $data['auth'])->get('driver_auth_table');
                  if(!empty($drvAuth) && $drvAuth->num_rows()>0 && 
                     !empty($drvData=$drvAuth->row()) && isset($drvData->driver_id) && 
                     !empty($driver_id=$drvData->driver_id)){
                        $status = $this->db->update('transport_details',array('status'=>5),
                                                    array('transport_id'=>$data['trip_id'],
                                                          'driver_id'=>$driver_id));
                  }
            }
            return $status;
      }             
}?>