<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\CarOwner;
use App\Models\User;
use App\Models\CarOwnerCar;
use App\Models\BodyType;
use App\Models\WashTypeToWash;
use App\Models\WashCategory;
use App\Models\WashDetail;
use App\Models\CurrencyMaster;
use App\Models\OptionalExtra;
use App\Models\CleanerWash;
use App\Models\Loyalty;
use App\Models\Rating;
use App\Models\Review;
use App\Models\CarWashOwner;
use Carbon\Carbon;
use DB;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Validator;
use Config;
use Hash;
use Auth;

class CoCarController extends Controller
{
    public function __construct(){
    }


    public function index(){
    }

    public function addCar(Request $request){
        $validate = Validator::make(
            $request->all(),
            [
                'car_registration_no' => 'required',
                'co_id' => 'required',
                // 'body_type_id' => 'required',
                // 'control_no' => 'required',
                // 'make' => 'required',
                // 'engine_no' => 'required',
                // 'vin' => 'required',
                // 'license_expiry_date' => 'required',
            ],
            [
                // 'body_type_id.required' => 'Please select a body type'
            ]
        );

        if($validate->fails()) {
            $errorString = implode(",", $validate->messages()->all());
            return response()->json([
                'success' => 0,
                'message' => $errorString,
            ]);
        }
        $car_registration_no = $request->input('car_registration_no');
        $co_id = $request->input('co_id');
        $body_type_id = $request->input('body_type_id');
        $control_no = $request->input('control_no');
        $make = $request->input('make');
        $keytag = $request->input('keytag');
        $engine_no = $request->input('engine_no');
        $vin = $request->input('vin');
        $license_expiry_date = $request->input('license_expiry_date');
        if($body_type_id != '') {
            $getBodyType = BodyType::where('id', $body_type_id)->select('name')->first();
            $body_type = $getBodyType->name;
        } else {
            $body_type_id = 0;
            $body_type = '';
        }
        if($license_expiry_date != '') {
            $license_expiry_date = date("Y-m-d", strtotime($license_expiry_date));
        }
        $dt = Carbon::now();

        $checkCar = CarOwnerCar::where('car_registration_no', $car_registration_no)->first();
        if(!empty($checkCar)) {
            // if($checkCar->body_type_id == 0){
            //     $checkCar->update([
            //         'body_type'=> $body_type,
            //         'body_type_id'=> $body_type_id,
            //         'updated_at'=>$dt->toDayDateTimeString()
            //         ]);    
            // }
            $checkCar->update([
                    'co_id'=> $co_id,
                    'is_display'=> 1,
                    'updated_at'=>$dt->toDayDateTimeString()
                    ]);
            $car_id = $checkCar->id;
            $checkCar = CarOwnerCar::where('id', $car_id)->first();
            // return response()->json([
            //     'success' => 0,
            //     'message' => 'Car registration no already exists.'
            // ]);
        } else {
            $carData=[
                'co_id'=> $co_id,
                'car_registration_no'=> $car_registration_no,
                'body_type'=> $body_type,
                'body_type_id'=> $body_type_id,
                'control_no'=> $control_no,
                'make'=> $make,
                'keytag'=> $keytag,
                'engine_no'=> $engine_no,
                'vin'=> $vin,
                'license_expiry_date'=> $license_expiry_date,
                'is_display'=> 1,
                'created_at'=>$dt->toDayDateTimeString(),
                'updated_at'=>$dt->toDayDateTimeString(),
            ];
            $insertCar = CarOwnerCar::create($carData);
            $car_id = $insertCar->id;
            $checkCar = CarOwnerCar::where('id', $car_id)->first();
        }
        return response()->json([
                'success' => 1,
                'message' => 'Success',
                'car_id' => $car_id,
                'car_registration_no'=> $car_registration_no,
                'car_details' => $checkCar
            ]);
    }

    public function getCars(Request $request){
        $validate = Validator::make(
            $request->all(),
            [
                'co_id' => 'required',
                'per_page' => 'required',
                'total_viewed' => 'required'
            ],
            [
                // 'co_id.required' => 'Please enter car owner id'
            ]
        );
        if($validate->fails()) {
            $errorString = implode(",", $validate->messages()->all());
            return response()->json([
                'success' => 0,
                'message' => $errorString,
            ]);
        }
        $co_id = $request->input('co_id');
        $per_page = $request->input('per_page');
        $total_viewed = $request->input('total_viewed');

        $coDetails = CarOwner::findorfail($co_id);
        $co_phone = $coDetails->co_phone;

        $dataDisplay=[];
        $dataArray = [];
        if($co_phone == ''){
            $getCar = CarOwnerCar::select('co_master.co_fname', 'co_master.co_lname', 'co_master.co_phone', 'co_master.email','co_master.isd_code', 'co_car.id as coCarId', 'co_car.car_registration_no', 'co_car.make',)
                            ->join('co_master','co_master.id','=','co_car.co_id')
                            ->where('co_car.co_id', $co_id)
                            ->where('co_car.is_display', 1)
                            // ->orderBy('co_car.id', 'desc');
                            ->orderBy('co_car.wash_status_update_datetime', 'desc');
            $carCount = $getCar->count();                    
            $getCar = $getCar->limit($per_page)
                        ->offset($total_viewed)
                        ->get();                
        } else {
            /*$getCar = CarOwnerCar::select('co_master.co_fname', 'co_master.co_lname', 'co_master.co_phone', 'co_master.email','co_master.isd_code', 'co_car.id as coCarId', 'co_car.car_registration_no', 'co_car.make', 'wash_details.car_id')
                            ->join('co_master','co_master.id','=','co_car.co_id')
                            ->leftJoin('wash_details','wash_details.driver_phone','=','co_master.co_phone')
                            ->where('co_car.co_id', $co_id)
                            ->where('co_car.is_display', 1)
                            // ->orderBy('co_car.id', 'desc');
                            ->orderBy('co_car.wash_status_update_datetime', 'desc');*/
            $getCar = CarOwnerCar::select('co_master.co_fname', 'co_master.co_lname', 'co_master.co_phone', 'co_master.email','co_master.isd_code', 'co_car.id as coCarId', 'co_car.car_registration_no', 'co_car.make',)
                            ->join('co_master','co_master.id','=','co_car.co_id')
                            ->where('co_car.co_id', $co_id)
                            ->where('co_car.is_display', 1)
                            // ->orderBy('co_car.id', 'desc');
                            ->orderBy('co_car.wash_status_update_datetime', 'desc');

            $getCar = WashDetail::select('co_master.co_fname', 'co_master.co_lname', 'co_master.co_phone', 'co_master.email','co_master.isd_code', 'co_car.id as coCarId', 'co_car.car_registration_no', 'co_car.make')
                        ->join('co_master','co_master.co_phone','=','wash_details.driver_phone')
                        ->join('co_car','co_car.id','=','wash_details.car_id')
                        ->where('wash_details.driver_phone', $co_phone)
                        // ->where('co_car.is_display', 1)
                            // ->orderBy('co_car.id', 'desc');
                        // ->orderBy('wash_details.updated_at', 'desc')
                        ->orderBy('co_car.wash_status_update_datetime', 'desc')
                        ->union($getCar); 
            $carCount = $getCar->count();                    
            $getCar = $getCar->limit($per_page)
                        ->offset($total_viewed)
                        ->get();                           
        }
        // $carCount = $getCar->count();                    
        // $getCar = $getCar->limit($per_page)
        //                 ->offset($total_viewed)
        //                 ->get();
        // echo "<pre>";print_r($getCar->toArray());exit;
        if($getCar != ''){
            foreach ($getCar as $d) {
                $dataDisplay['owner_name'] = $d->co_fname . ' ' . $d->co_lname; 
                $dataDisplay['car_id'] = $d->coCarId;
                $dataDisplay['car_registration_no'] = $d->car_registration_no;
                $dataDisplay['make'] = $d->make;

                $dataWash = WashDetail::select('wash_details.id as washId', 'wash_details.car_id', 'wash_details.entry_date', 'wash_details.wash_type_id', 'wash_details.body_type', 'wash_details.amount', 'wash_details.date_washed', 'wash_details.time_washed', 'wash_details.status as wash_status', 'wash_details.payment_status', 'wash_details.payment_details', 'wash_details.cwo_id', 'cwo_master.cwo_name', 'cwo_master.cwo_company', 'cwo_master.cwo_isd', 'cwo_master.cwo_phone', 'wash_details.driver_name', 'wash_details.driver_isd_code', 'wash_details.driver_phone', 'wash_details.total_amount', 'wash_details.is_free_wash', 'wash_details.driver_email', 'wash_details.wash_in', 'wash_details.wash_out')
                ->leftJoin('cwo_master', 'cwo_master.id', '=', 'wash_details.cwo_id')
                ->leftJoin('currency_masters', 'currency_masters.id', '=', 'cwo_master.currency_id')
                ->where('wash_details.car_id', $d->coCarId);
                $dataWash = $dataWash->orderBy('wash_details.id', 'desc');
                $dataWash = $dataWash->take(1)->get();
                // echo "<pre>";print_r($dataWash->toArray());
                if(count($dataWash) > 0) {
                    $dataDisplay['wash_id'] = $dataWash[0]->washId;    
                    $dataDisplay['cwo_id'] = $dataWash[0]->cwo_id;    
                    $dataDisplay['cwo_company'] = $dataWash[0]->cwo_company;  
                    if($dataWash[0]->date_washed != ''){  
                        // $dataDisplay['date_washed'] = $dataWash[0]->date_washed;
                        $dataDisplay['date_washed'] = date("d-m-Y", strtotime($dataWash[0]->date_washed));
                    } else {
                        $dataDisplay['date_washed'] = '';
                    }
                    if($dataWash[0]->wash_status == 0){
                        $dataDisplay['status'] = 'Car in-queue';    
                    }
                    if($dataWash[0]->wash_status == 1){
                        $dataDisplay['status'] = 'In Wash Bay';    
                    }
                    if($dataWash[0]->wash_status == 2){
                        $dataDisplay['status'] = 'Finishing Bay';    
                    }
                    if($dataWash[0]->wash_status == 3){
                        $dataDisplay['status'] = 'Car Wash Completed';    
                    }
                    if($dataWash[0]->wash_status == 4){
                        $dataDisplay['status'] = 'Cancelled';    
                    }
                    if($dataWash[0]->wash_status == 5){
                        $dataDisplay['status'] = 'Keys Collected';    
                    }
                    if($dataWash[0]->cwo_phone != ''){
                        $dataDisplay['cwo_phone'] = '+' . $dataWash[0]->cwo_isd . $dataWash[0]->cwo_phone;
                    } else {
                        $dataDisplay['cwo_phone'] = '';  
                    } 
                    $wash_types = WashTypeToWash::select('wash_categories.wash_name', 'wash_type_to_washes.price')
                            ->join('wash_categories', 'wash_categories.id', '=', 'wash_type_to_washes.wash_type_id')
                            ->where('wash_type_to_washes.wash_id', $dataWash[0]->washId)
                            ->orderBy('wash_type_to_washes.id', 'asc')
                            ->get();
                    $dataDisplay['wash_types'] = $wash_types;  
                    if($dataWash[0]->wash_type_id > 0){
                        $getWashType = WashCategory::where('id', $dataWash[0]->wash_type_id)->select('wash_name')->first();
                        if($getWashType != ''){
                            $dataDisplay['wash_name'] = $getWashType->wash_name;    
                        } else {
                            $dataDisplay['wash_name'] = '';
                        }
                    } else {
                        $dataDisplay['wash_name'] = '';
                    } 

                    $dataDisplay['allow_review'] = 1; 
                    $dataDisplay['reviewCount'] = Review::where('wash_id', $dataWash[0]->washId)->count();   
                } else {
                    $dataDisplay['wash_id'] = 0;
                    $dataDisplay['cwo_id'] = 0;
                    $dataDisplay['cwo_company'] = ''; 
                    $dataDisplay['cwo_phone'] = ''; 
                    $dataDisplay['date_washed'] = ''; 
                    $dataDisplay['wash_types'] = '';
                    $dataDisplay['wash_name'] = ''; 
                    $dataDisplay['allow_review'] = 0; 
                    $dataDisplay['reviewCount'] = '';
                }


                $dataArray[] = $dataDisplay;


            } // foreach ends

        }// if ends
        // exit;

        /*$data = CarOwnerCar::select('wash_details.id as washId', 'wash_details.car_id', 'wash_details.entry_date', 'wash_details.wash_type_id', 'wash_details.body_type', 'wash_details.amount', 'wash_details.date_washed', 'wash_details.time_washed', 'wash_details.status as wash_status', 'wash_details.payment_status', 'wash_details.payment_details', 'cwo_master.cwo_name', 'cwo_master.cwo_company', 'cwo_master.cwo_isd', 'cwo_master.cwo_phone', 'co_master.co_fname', 'co_master.co_lname', 'co_master.co_phone', 'co_master.email', 'co_car.id as coCarId', 'co_car.car_registration_no', 'co_car.make', 'currency_masters.symbol', 'wash_details.entry_time', 'co_master.isd_code', 'wash_details.driver_name', 'wash_details.driver_isd_code', 'wash_details.driver_phone', 'wash_details.total_amount', 'wash_details.is_free_wash', 'wash_details.driver_email', 'wash_details.wash_in', 'wash_details.wash_out')
        ->distinct(['wash_details.car_id'])
        ->join('co_master','co_master.id','=','co_car.co_id')
        ->leftJoin('wash_details','wash_details.car_id','=','co_car.id')
        ->leftJoin('cwo_master', 'cwo_master.id', '=', 'wash_details.cwo_id')
        ->leftJoin('currency_masters', 'currency_masters.id', '=', 'cwo_master.currency_id')
        ->where('co_car.co_id', $co_id);
        $data = $data->orderBy('wash_details.id', 'desc');
        $dataCount = $data->count();
        $data = $data->get();
        // $data = $data->take(1)->get();
        // echo "<pre>";print_r($data->toArray());exit;

        $dataDisplay=[];
        $dataArray = [];
        if($data != '') {
            foreach ($data as $d) {
                $dataDisplay['owner_name'] = $d->co_fname . ' ' . $d->co_lname; 
                $dataDisplay['car_id'] = $d->coCarId;
                $dataDisplay['car_registration_no'] = $d->car_registration_no;
                $dataDisplay['make'] = $d->make;
                $dataDisplay['wash_id'] = $d->washId;
                if($d->washId > 0){
                    $dataDisplay['cwo_company'] = $d->cwo_company;    
                    $dataDisplay['date_washed'] = $d->date_washed; 
                    if($d->cwo_phone != ''){
                        $dataDisplay['cwo_phone'] = '+' . $d->cwo_isd . $d->cwo_phone;
                    } else {
                        $dataDisplay['cwo_phone'] = '';  
                    } 
                    $wash_types = WashTypeToWash::select('wash_categories.wash_name', 'wash_type_to_washes.price')
                            ->join('wash_categories', 'wash_categories.id', '=', 'wash_type_to_washes.wash_type_id')
                            ->where('wash_type_to_washes.wash_id', $d->washId)
                            ->orderBy('wash_type_to_washes.id', 'asc')
                            ->get();
                    $dataDisplay['wash_types'] = $wash_types;  
                    if($d->wash_type_id > 0){
                        $getWashType = WashCategory::where('id', $d->wash_type_id)->select('wash_name')->first();
                        if($getWashType != ''){
                            $dataDisplay['wash_name'] = $getWashType->wash_name;    
                        } else {
                            $dataDisplay['wash_name'] = '';
                        }
                    } else {
                        $dataDisplay['wash_name'] = '';
                    }
                } else {
                    $dataDisplay['cwo_company'] = ''; 
                    $dataDisplay['cwo_phone'] = ''; 
                    $dataDisplay['date_washed'] = ''; 
                    $dataDisplay['wash_types'] = '';
                    $dataDisplay['wash_name'] = ''; 
                }

                $dataArray[] = $dataDisplay;
            }
        }*/
        return response()->json([
            'success' => 1,
            'message' => 'Success',
            'count' => $carCount,
            'carList' => $dataArray
        ]);

    }

    // public function getCars(Request $request){
    //     $validate = Validator::make(
    //         $request->all(),
    //         [
    //             'co_id' => 'required',
    //             // 'per_page' => 'required',
    //             // 'total_viewed' => 'required'
    //         ],
    //         [
    //             // 'co_id.required' => 'Please enter car owner id'
    //         ]
    //     );
    //     if($validate->fails()) {
    //         $errorString = implode(",", $validate->messages()->all());
    //         return response()->json([
    //             'success' => 0,
    //             'message' => $errorString,
    //         ]);
    //     }
    //     $co_id = $request->input('co_id');
    //     $per_page = $request->input('per_page');
    //     $total_viewed = $request->input('total_viewed');

    //     $washDataCount = 0;
    //     $carCount = 0;
    //     $dataDisplay=[];
    //     $dataArray = [];

    //     // if($total_viewed == 0) {
    //         $data = CarOwnerCar::select('co_master.co_fname', 'co_master.co_lname', 'co_master.co_phone', 'co_master.email','co_master.isd_code', 'co_car.id as coCarId', 'co_car.car_registration_no', 'co_car.make', 'wash_details.id as washId', 'wash_details.car_id', 'wash_details.entry_date', 'wash_details.wash_type_id', 'wash_details.body_type', 'wash_details.amount', 'wash_details.date_washed', 'wash_details.time_washed', 'wash_details.status as wash_status', 'wash_details.payment_status', 'wash_details.payment_details', 'cwo_master.cwo_name', 'cwo_master.cwo_company', 'cwo_master.cwo_isd', 'cwo_master.cwo_phone', 'wash_details.driver_name', 'wash_details.driver_isd_code', 'wash_details.driver_phone', 'wash_details.total_amount', 'wash_details.is_free_wash', 'wash_details.driver_email', 'wash_details.wash_in', 'wash_details.wash_out')
    //         ->distinct(['wash_details.car_id'])
    //         ->join('co_master','co_master.id','=','co_car.co_id')
    //         ->leftJoin('wash_details','wash_details.car_id','=','co_car.id')
    //         ->leftJoin('cwo_master', 'cwo_master.id', '=', 'wash_details.cwo_id')
    //         ->leftJoin('currency_masters', 'currency_masters.id', '=', 'cwo_master.currency_id')
    //         ->where('co_car.co_id', $co_id)
    //         ->where('co_car.is_display', 1);
    //         $data = $data->orderBy('wash_details.updated_at', 'desc');
    //         $washDataCount = $data->count();
    //         // $data = $data->get();
    //         $data = $data->take(1)->get();
    //         // echo "<pre>";print_r($data->toArray());exit;
    //     // }
    //     // echo $washDataCount;exit;
    //     if($washDataCount > 0){
    //         $dataDisplay['owner_name'] = $data[0]->co_fname . ' ' . $data[0]->co_lname; 
    //         $dataDisplay['car_id'] = $data[0]->coCarId;
    //         $dataDisplay['car_registration_no'] = $data[0]->car_registration_no;
    //         $dataDisplay['make'] = $data[0]->make;
    //         $dataDisplay['wash_id'] = $data[0]->washId;    
    //         $dataDisplay['cwo_company'] = $data[0]->cwo_company;    
    //         $dataDisplay['date_washed'] = $data[0]->date_washed; 
    //         if($data[0]->cwo_phone != ''){
    //             $dataDisplay['cwo_phone'] = '+' . $data[0]->cwo_isd . $data[0]->cwo_phone;
    //         } else {
    //             $dataDisplay['cwo_phone'] = '';  
    //         }
    //         $dataDisplay['status_id'] = $data[0]->wash_status;
    //         if($data[0]->wash_status == 0) {
    //             $dataDisplay['status'] = 'Car in-queue';
    //         }
    //         if($data[0]->wash_status == 1) {
    //             $dataDisplay['status'] = 'In Wash Bay';
    //         }
    //         if($data[0]->wash_status == 2) {
    //             $dataDisplay['status'] = 'Finishing Bay';
    //         }
    //         if($data[0]->wash_status == 3) {
    //             $dataDisplay['status'] = 'Car Wash Completed';
    //         }
    //         if($data[0]->wash_status == 4) {
    //             $dataDisplay['status'] = 'Cancelled';
    //         }
    //         if($data[0]->wash_status == 5){
    //             $dataDisplay['status'] = 'Keys Collected';    
    //         }  
    //         $wash_types = WashTypeToWash::select('wash_categories.wash_name', 'wash_type_to_washes.price')
    //                         ->join('wash_categories', 'wash_categories.id', '=', 'wash_type_to_washes.wash_type_id')
    //                         ->where('wash_type_to_washes.wash_id', $data[0]->washId)
    //                         ->orderBy('wash_type_to_washes.id', 'asc')
    //                         ->get();
    //         $dataDisplay['wash_types'] = $wash_types;  
    //         if($data[0]->wash_type_id > 0){
    //             $getWashType = WashCategory::where('id', $data[0]->wash_type_id)->select('wash_name')->first();
    //             if($getWashType != ''){
    //                 $dataDisplay['wash_name'] = $getWashType->wash_name;    
    //             } else {
    //                 $dataDisplay['wash_name'] = '';
    //             }
    //         } else {
    //             $dataDisplay['wash_name'] = '';
    //         } 

    //         $dataArray[] = $dataDisplay;  

    //         if($total_viewed == 0) {
    //             // echo "1";exit;
    //             $getCar = CarOwnerCar::select('co_master.co_fname', 'co_master.co_lname', 'co_master.co_phone', 'co_master.email','co_master.isd_code', 'co_car.id as coCarId', 'co_car.car_registration_no', 'co_car.make',)
    //                             ->join('co_master','co_master.id','=','co_car.co_id')
    //                             ->where('co_car.co_id', $co_id)
    //                             ->where('co_car.id', '!=', $data[0]->coCarId)
    //                             ->where('co_car.is_display', 1);
    //                             // ->orderBy('co_car.id', 'desc');
    //             $carCount = $getCar->count() + 1; 
    //             $per_page = $per_page - 1;  
    //             $total_viewed = $total_viewed;                 
    //             $getCar = $getCar->limit($per_page)
    //                             ->offset($total_viewed)
    //                             ->get();
    //         } else {
    //             // echo "2";exit;
    //             $dataDisplay=[];
    //     $dataArray = [];
    //     print_r($dataDisplay);print_r($dataArray);
    //             /*$getCar = CarOwnerCar::select('co_master.co_fname', 'co_master.co_lname', 'co_master.co_phone', 'co_master.email','co_master.isd_code', 'co_car.id as coCarId', 'co_car.car_registration_no', 'co_car.make',)
    //                         ->join('co_master','co_master.id','=','co_car.co_id')
    //                         ->where('co_car.co_id', $co_id)
    //                         ->where('co_car.id', '!=', $data[0]->coCarId)
    //                         ->where('co_car.is_display', 1)
    //                         ->orderBy('co_car.id', 'desc');
    //             $carCount = $getCar->count();                    
    //             $getCar = $getCar->limit($per_page)
    //                         ->offset($total_viewed)
    //                         ->get();*/
    //             $getCar = CarOwnerCar::select('co_master.co_fname', 'co_master.co_lname', 'co_master.co_phone', 'co_master.email','co_master.isd_code', 'co_car.id as coCarId', 'co_car.car_registration_no', 'co_car.make',)
    //                         ->join('co_master','co_master.id','=','co_car.co_id')
    //                         ->where('co_car.co_id', $co_id)
    //                         ->where('co_car.id', '!=', $data[0]->coCarId)
    //                         ->where('co_car.is_display', 1);
    //                         // ->orderBy('co_car.id', 'desc');
    //             $carCount = $getCar->count();                    
    //             $getCar = $getCar->limit($per_page)
    //                         ->offset($total_viewed)
    //                         ->get();            
    //         }
    //     } else {
    //         // echo "3";exit;
    //         $getCar = CarOwnerCar::select('co_master.co_fname', 'co_master.co_lname', 'co_master.co_phone', 'co_master.email','co_master.isd_code', 'co_car.id as coCarId', 'co_car.car_registration_no', 'co_car.make',)
    //                         ->join('co_master','co_master.id','=','co_car.co_id')
    //                         ->where('co_car.co_id', $co_id)
    //                         ->where('co_car.is_display', 1);
    //                         // ->orderBy('co_car.id', 'desc');
    //         $carCount = $getCar->count();                    
    //         $getCar = $getCar->limit($per_page)
    //                         ->offset($total_viewed)
    //                         ->get();
    //     }
    //     // echo "<pre>";print_r($getCar->toArray());exit;

    //     if($getCar != ''){
    //         foreach ($getCar as $d) {
    //             $dataDisplay['owner_name'] = $d->co_fname . ' ' . $d->co_lname; 
    //             $dataDisplay['car_id'] = $d->coCarId;
    //             $dataDisplay['car_registration_no'] = $d->car_registration_no;
    //             $dataDisplay['make'] = $d->make;

    //             $dataWash = WashDetail::select('wash_details.id as washId', 'wash_details.car_id', 'wash_details.entry_date', 'wash_details.wash_type_id', 'wash_details.body_type', 'wash_details.amount', 'wash_details.date_washed', 'wash_details.time_washed', 'wash_details.status as wash_status', 'wash_details.payment_status', 'wash_details.payment_details', 'cwo_master.cwo_name', 'cwo_master.cwo_company', 'cwo_master.cwo_isd', 'cwo_master.cwo_phone', 'wash_details.driver_name', 'wash_details.driver_isd_code', 'wash_details.driver_phone', 'wash_details.total_amount', 'wash_details.is_free_wash', 'wash_details.driver_email', 'wash_details.wash_in', 'wash_details.wash_out')
    //             ->leftJoin('cwo_master', 'cwo_master.id', '=', 'wash_details.cwo_id')
    //             ->leftJoin('currency_masters', 'currency_masters.id', '=', 'cwo_master.currency_id')
    //             ->where('wash_details.car_id', $d->coCarId);
    //             $dataWash = $dataWash->orderBy('wash_details.id', 'desc');
    //             $dataWash = $dataWash->take(1)->get();
    //             // echo "<pre>";print_r($dataWash->toArray());
    //             if(count($dataWash) > 0) {
    //                 $dataDisplay['wash_id'] = $dataWash[0]->washId;    
    //                 $dataDisplay['cwo_company'] = $dataWash[0]->cwo_company;    
    //                 $dataDisplay['date_washed'] = $dataWash[0]->date_washed; 
    //                 if($dataWash[0]->cwo_phone != ''){
    //                     $dataDisplay['cwo_phone'] = '+' . $dataWash[0]->cwo_isd . $dataWash[0]->cwo_phone;
    //                 } else {
    //                     $dataDisplay['cwo_phone'] = '';  
    //                 } 
    //                 $dataDisplay['status_id'] = $dataWash[0]->wash_status;
    //                 if($dataWash[0]->wash_status == 0) {
    //                     $dataDisplay['status'] = 'Car in-queue';
    //                 }
    //                 if($dataWash[0]->wash_status == 1) {
    //                     $dataDisplay['status'] = 'In Wash Bay';
    //                 }
    //                 if($dataWash[0]->wash_status == 2) {
    //                     $dataDisplay['status'] = 'Finishing Bay';
    //                 }
    //                 if($dataWash[0]->wash_status == 3) {
    //                     $dataDisplay['status'] = 'Car Wash Completed';
    //                 }
    //                 if($dataWash[0]->wash_status == 4) {
    //                     $dataDisplay['status'] = 'Cancelled';
    //                 }
    //                 if($dataWash[0]->wash_status == 5){
    //                     $dataDisplay['status'] = 'Keys Collected';    
    //                 }
    //                 $wash_types = WashTypeToWash::select('wash_categories.wash_name', 'wash_type_to_washes.price')
    //                         ->join('wash_categories', 'wash_categories.id', '=', 'wash_type_to_washes.wash_type_id')
    //                         ->where('wash_type_to_washes.wash_id', $dataWash[0]->washId)
    //                         ->orderBy('wash_type_to_washes.id', 'asc')
    //                         ->get();
    //                 $dataDisplay['wash_types'] = $wash_types;  
    //                 if($dataWash[0]->wash_type_id > 0){
    //                     $getWashType = WashCategory::where('id', $dataWash[0]->wash_type_id)->select('wash_name')->first();
    //                     if($getWashType != ''){
    //                         $dataDisplay['wash_name'] = $getWashType->wash_name;    
    //                     } else {
    //                         $dataDisplay['wash_name'] = '';
    //                     }
    //                 } else {
    //                     $dataDisplay['wash_name'] = '';
    //                 }    
    //             } else {
    //                 $dataDisplay['wash_id'] = 0;
    //                 $dataDisplay['cwo_company'] = ''; 
    //                 $dataDisplay['cwo_phone'] = ''; 
    //                 $dataDisplay['date_washed'] = ''; 
    //                 $dataDisplay['wash_types'] = '';
    //                 $dataDisplay['wash_name'] = ''; 
    //             }


    //             $dataArray[] = $dataDisplay;


    //         } // foreach ends

    //     }// if ends

        
    //     return response()->json([
    //         'success' => 1,
    //         'message' => 'Success',
    //         'count' => $carCount,
    //         'carList' => $dataArray
    //     ]);

    // }

    public function updateCar(Request $request){
        $car_id = $request->input('car_id');
        $validate = Validator::make(
            $request->all(),
            [   
                'car_id' => 'required',
                'car_registration_no' => 'required|unique:co_car,car_registration_no,' . $car_id,
            ],
            [
                'car_registration_no.unique' => 'This car registration number already exists.'
            ]
        );
        if($validate->fails()) {
            $errorString = implode(",", $validate->messages()->all());
            return response()->json([
                'success' => 0,
                'message' => $errorString,
            ]);
        }

        $car_registration_no = $request->input('car_registration_no');
        $make = $request->input('make');
        $dt = Carbon::now();

        $item = CarOwnerCar::where('id', $car_id)->first();
        $data = [
            'car_registration_no' => $car_registration_no,
            'make' => $make,
            'updated_at' => $dt->toDayDateTimeString()
        ];
        $item->update($data);
        return response()->json([
                'success' => 1,
                'message' => 'Success',
                'car_id' => $car_id
            ]);
    }

    public function getLatestCars(Request $request){
        $validate = Validator::make(
            $request->all(),
            [
                'co_id' => 'required'
            ],
            [
                // 'co_id.required' => 'Please enter car owner id'
            ]
        );
        if($validate->fails()) {
            $errorString = implode(",", $validate->messages()->all());
            return response()->json([
                'success' => 0,
                'message' => $errorString,
            ]);
        }
        $co_id = $request->input('co_id');

        $dataDisplay=[];
        $dataArray = [];
        $getCar = CarOwnerCar::select('co_master.co_fname', 'co_master.co_lname', 'co_master.co_phone', 'co_master.email','co_master.isd_code', 'co_car.id as coCarId', 'co_car.car_registration_no', 'co_car.make',)
                            ->join('co_master','co_master.id','=','co_car.co_id')
                            ->where('co_car.co_id', $co_id)
                            ->orderBy('co_car.id', 'desc')
                            ->take(3)
                            ->get();
                            // echo "<pre>";print_r($getCar->toArray());exit;
        if($getCar != ''){
            foreach ($getCar as $d) {
                $dataDisplay['owner_name'] = $d->co_fname . ' ' . $d->co_lname; 
                $dataDisplay['car_id'] = $d->coCarId;
                $dataDisplay['car_registration_no'] = $d->car_registration_no;
                $dataDisplay['make'] = $d->make;

                $dataWash = WashDetail::select('wash_details.id as washId', 'wash_details.car_id', 'wash_details.entry_date', 'wash_details.wash_type_id', 'wash_details.body_type', 'wash_details.amount', 'wash_details.date_washed', 'wash_details.time_washed', 'wash_details.status as wash_status', 'wash_details.payment_status', 'wash_details.payment_details', 'cwo_master.cwo_name', 'cwo_master.cwo_company', 'cwo_master.cwo_isd', 'cwo_master.cwo_phone', 'wash_details.driver_name', 'wash_details.driver_isd_code', 'wash_details.driver_phone', 'wash_details.total_amount', 'wash_details.is_free_wash', 'wash_details.driver_email', 'wash_details.wash_in', 'wash_details.wash_out')
                ->leftJoin('cwo_master', 'cwo_master.id', '=', 'wash_details.cwo_id')
                ->leftJoin('currency_masters', 'currency_masters.id', '=', 'cwo_master.currency_id')
                ->where('wash_details.car_id', $d->coCarId);
                $dataWash = $dataWash->orderBy('wash_details.id', 'desc');
                $dataWash = $dataWash->take(1)->get();
                // echo "<pre>";print_r($dataWash->toArray());
                if(count($dataWash) > 0) {
                    $dataDisplay['wash_id'] = $dataWash[0]->washId;    
                    $dataDisplay['cwo_company'] = $dataWash[0]->cwo_company;    
                    $dataDisplay['date_washed'] = $dataWash[0]->date_washed; 
                    if($dataWash[0]->cwo_phone != ''){
                        $dataDisplay['cwo_phone'] = '+' . $dataWash[0]->cwo_isd . $dataWash[0]->cwo_phone;
                    } else {
                        $dataDisplay['cwo_phone'] = '';  
                    } 
                    $wash_types = WashTypeToWash::select('wash_categories.wash_name', 'wash_type_to_washes.price')
                            ->join('wash_categories', 'wash_categories.id', '=', 'wash_type_to_washes.wash_type_id')
                            ->where('wash_type_to_washes.wash_id', $dataWash[0]->washId)
                            ->orderBy('wash_type_to_washes.id', 'asc')
                            ->get();
                    $dataDisplay['wash_types'] = $wash_types;  
                    if($dataWash[0]->wash_type_id > 0){
                        $getWashType = WashCategory::where('id', $dataWash[0]->wash_type_id)->select('wash_name')->first();
                        if($getWashType != ''){
                            $dataDisplay['wash_name'] = $getWashType->wash_name;    
                        } else {
                            $dataDisplay['wash_name'] = '';
                        }
                    } else {
                        $dataDisplay['wash_name'] = '';
                    }    
                } else {
                    $dataDisplay['wash_id'] = 0;
                    $dataDisplay['cwo_company'] = ''; 
                    $dataDisplay['cwo_phone'] = ''; 
                    $dataDisplay['date_washed'] = ''; 
                    $dataDisplay['wash_types'] = '';
                    $dataDisplay['wash_name'] = ''; 
                }


                $dataArray[] = $dataDisplay;


            } // foreach ends

        }// if ends
        // exit;
        return response()->json([
            'success' => 1,
            'message' => 'Success',
            // 'count' => $dataCount,
            'carList' => $dataArray
        ]);

    }

    public function totalRecords(Request $request){
        $validate = Validator::make(
            $request->all(),
            [
                'co_id' => 'required'
            ],
            [
                // 'co_id.required' => 'Please enter car owner id'
            ]
        );
        if($validate->fails()) {
            $errorString = implode(",", $validate->messages()->all());
            return response()->json([
                'success' => 0,
                'message' => $errorString,
            ]);
        }
        $co_id = $request->input('co_id');

        $totalCarCount = CarOwnerCar::where('co_id', $co_id)
                                    ->orderBy('co_car.id', 'desc')
                                    ->count();

        $totalCarWashCount = WashDetail::select(DB::raw('COUNT(wash_details.car_id) as total_car_count'))
            ->join('co_car','co_car.id','=','wash_details.car_id')
            ->join('co_master','co_master.id','=','co_car.co_id')
            ->where('co_car.co_id', $co_id)
            ->where(function($query) {  
                    $query->where('wash_details.status', 3)
                        ->orWhere('wash_details.status', 5);
                })
            ->get(); 
        // echo "<pre>";print_r($totalCarWashCount->toArray());exit;  

        $totalSpentCount = WashDetail::select(DB::raw('SUM(wash_details.total_amount) as total_spent_count'))
            ->join('co_car','co_car.id','=','wash_details.car_id')
            ->join('co_master','co_master.id','=','co_car.co_id')
            ->where('co_car.co_id', $co_id)
            ->where('wash_details.payment_status', 1)
            ->where(function($query) {  
                    $query->where('wash_details.status', 3)
                        ->orWhere('wash_details.status', 5);
                })
            ->get(); 
        // echo "<pre>";print_r($totalSpentCount->toArray());exit;    

        $getCurrency = WashDetail::select('cwo_id')
            ->join('co_car','co_car.id','=','wash_details.car_id')
            ->join('co_master','co_master.id','=','co_car.co_id')
            ->where('co_car.co_id', $co_id)
            // ->where(function($query) {  
            //         $query->where('wash_details.status', 3)
            //             ->orWhere('wash_details.status', 5);
            //     })
            ->orderBy('wash_details.id', 'desc')
            ->take(1)
            ->get(); 
        // echo "<pre>";print_r($getCurrency->toArray());exit;    
        if($getCurrency->count() > 0){
            if($getCurrency[0]->cwo_id > 0){
                $cwo_id = $getCurrency[0]->cwo_id;
                $currencyDetail = CurrencyMaster::select('cwo_master.currency_id','currency_masters.symbol')
                    ->join('cwo_master','cwo_master.currency_id','=','currency_masters.id')
                    ->where('cwo_master.id', $cwo_id)
                    ->get();
                // echo $currencyDetail->count();exit;    
                // echo "<pre>";print_r($currencyDetail->toArray());exit;  
                if($currencyDetail->count() > 0) {
                    $currency = $currencyDetail[0]->symbol;    
                } else {
                    $currency = 'R';
                }  


                // $currency = 'calculate';
            } else {
                $currency = 'R';
            }
        } else {
            $currency = 'R';
        }                

        return response()->json([
            'success' => 1,
            'message' => 'Success',
            'totalCarCount' => $totalCarCount,
            'totalCarWashCount' => $totalCarWashCount[0]->total_car_count,
            'totalSpentCount' => formatCurrency($totalSpentCount[0]->total_spent_count),
            'currency' => $currency,
        ]);                            

    }

    public function trackCar(Request $request){
        $validate = Validator::make(
            $request->all(),
            [
                'car_id' => 'required'
            ],
            [
                'car_id.required' => 'Please enter car id'
            ]
        );
        if($validate->fails()) {
            $errorString = implode(",", $validate->messages()->all());
            return response()->json([
                'success' => 0,
                'message' => $errorString,
            ]);
        }
        $car_id = $request->input('car_id');

        $carDetails = CarOwnerCar::findorfail($car_id);

        $dataDisplay=[];
        // $dataArray = [];
        $dataWash = WashDetail::select('wash_details.id','wash_details.car_id','wash_details.date_washed','wash_details.time_washed','wash_details.status','wash_details.payment_status','wash_details.otp', 'wash_details.payment_details', 'wash_details.amount', 'wash_details.total_amount', 'wash_details.driver_name', 'wash_details.driver_isd_code', 'wash_details.driver_phone', 'wash_details.is_free_wash', 'wash_details.wash_type_id', 'wash_details.keys_collected', 'wash_details.image', 'wash_details.discount', 'cwo_master.cwo_company', 'cwo_master.cwo_isd', 'cwo_master.cwo_phone', 'currency_masters.symbol')
                ->leftJoin('cwo_master', 'cwo_master.id', '=', 'wash_details.cwo_id')
                ->leftJoin('currency_masters', 'currency_masters.id', '=', 'cwo_master.currency_id')
                ->where('wash_details.car_id', $car_id);
        $dataWash = $dataWash->orderBy('wash_details.id', 'desc');
        $dataWash = $dataWash->take(1)->get();
        // echo "<pre>";print_r($dataWash->toArray());
        if(count($dataWash) > 0) {
            $dataDisplay['wash_id'] = $dataWash[0]->id;    
            $dataDisplay['cwo_company'] = $dataWash[0]->cwo_company;    
            // $dataDisplay['date_washed'] = $dataWash[0]->date_washed; 
            if($dataWash[0]->cwo_phone != ''){
                $dataDisplay['cwo_phone'] = '+' . $dataWash[0]->cwo_isd . $dataWash[0]->cwo_phone;
            } else {
                $dataDisplay['cwo_phone'] = '';  
            }
            $dataDisplay['payment_status_id'] = $dataWash[0]->payment_status;
            if($dataWash[0]->payment_status == 1) {
                $dataDisplay['payment_status'] = 'Paid';
            } else {
                $dataDisplay['payment_status'] = 'Not Paid';
            }
            $dataDisplay['status_id'] = $dataWash[0]->status;
            if($dataWash[0]->status == 0) {
                $dataDisplay['status'] = 'Car in-queue';
            }
            if($dataWash[0]->status == 1) {
                $dataDisplay['status'] = 'In Wash Bay';
            }
            if($dataWash[0]->status == 2) {
                $dataDisplay['status'] = 'Finishing Bay';
            }
            if($dataWash[0]->status == 3) {
                $dataDisplay['status'] = 'Car Wash Completed';
            }
            if($dataWash[0]->status == 4) {
                $dataDisplay['status'] = 'Cancelled';
            }
            if($dataWash[0]->status == 5){
                $dataDisplay['status'] = 'Keys Collected';    
            }
            if($dataWash[0]->date_washed != '') {
                $dataDisplay['date_washed']  = date("d/m/Y", strtotime($dataWash[0]->date_washed));
            } else {
                $dataDisplay['date_washed']  = '';
            } 
            if($dataWash[0]->time_washed != '') {
                $dataDisplay['time_washed']  = date("h:i a", strtotime($dataWash[0]->time_washed));
            } else {
                $dataDisplay['time_washed']  = '';
            }
            if($dataWash[0]->keys_collected != ''){
                $dataDisplay['keys_collected']  = date("d/m/Y", strtotime($dataWash[0]->keys_collected));
            } else {
                $dataDisplay['keys_collected'] = '';
            }
            if($dataWash[0]->is_free_wash == 1) {
                $dataDisplay['is_free_wash'] = true;
            }
            if($dataWash[0]->is_free_wash == 0) {
                $dataDisplay['is_free_wash'] = false;
            }
            $dataDisplay['otp'] = $dataWash[0]->otp;
            $dataDisplay['payment_mode'] = $dataWash[0]->payment_details;
            $dataDisplay['wash_amount'] = $dataWash[0]->amount;
            $dataDisplay['total_amount'] = $dataWash[0]->total_amount;
            $dataDisplay['discount_value_in_percentage'] = $dataWash[0]->discount;
            $dataDisplay['currency'] = $dataWash[0]->symbol;
            

            $wash_types = WashTypeToWash::select('wash_categories.wash_name', 'wash_type_to_washes.price')
                    ->join('wash_categories', 'wash_categories.id', '=', 'wash_type_to_washes.wash_type_id')
                    ->where('wash_type_to_washes.wash_id', $dataWash[0]->id)
                    ->orderBy('wash_type_to_washes.id', 'asc')
                    ->get();
            $dataDisplay['wash_types'] = $wash_types;  
            if($dataWash[0]->wash_type_id > 0){
                $getWashType = WashCategory::where('id', $dataWash[0]->wash_type_id)->select('wash_name')->first();
                if($getWashType != ''){
                    $dataDisplay['wash_name'] = $getWashType->wash_name;    
                } else {
                    $dataDisplay['wash_name'] = '';
                }
            } else {
                $dataDisplay['wash_name'] = '';
            }

            $optionalExtra = OptionalExtra::where('wash_id', $dataWash[0]->id)->select('optional_extra', 'price')->orderBy('id', 'asc')->get();
                $dataDisplay['extras'] = $optionalExtra;  

            $cleaners = CleanerWash::select('cleaner_masters.name', 'cleaner_washes.description as cleaning_description')
                            ->join('cleaner_masters', 'cleaner_masters.id', '=', 'cleaner_washes.cleaner_id')
                            ->where('cleaner_washes.wash_id', $dataWash[0]->id)
                            ->orderBy('cleaner_washes.id', 'asc')
                            ->get();
            $dataDisplay['cleaners'] = $cleaners;    
        } else {
            // $dataDisplay['wash_id'] = 0;
            // $dataDisplay['cwo_company'] = ''; 
            // $dataDisplay['cwo_phone'] = ''; 
            // $dataDisplay['date_washed'] = ''; 
            // $dataDisplay['wash_types'] = '';
            // $dataDisplay['wash_name'] = ''; 
        }
        return response()->json([
            'success' => 1,
            'message' => 'Success',
            'car_registration_no' => $carDetails->car_registration_no,
            'make' => $carDetails->make,
            'trackDetails' => $dataDisplay
        ]);

    }

    public function carWashHistory(Request $request){
        $validate = Validator::make(
            $request->all(),
            [
                'car_id' => 'required',
                'per_page' => 'required',
                'total_viewed' => 'required'
            ],
            [
                'car_id.required' => 'Please enter car id',
                'per_page.required' => 'Please enter per page',
                'total_viewed.required' => 'Please enter a total records viewed',
            ]
        );
        if($validate->fails()) {
            $errorString = implode(",", $validate->messages()->all());
            return response()->json([
                'success' => 0,
                'message' => $errorString,
            ]);
        }
        $car_id = $request->input('car_id');
        $per_page = $request->input('per_page');
        $total_viewed = $request->input('total_viewed');

        $carDetails = CarOwnerCar::findorfail($car_id);

        $data = WashDetail::select('wash_details.id','wash_details.car_id','wash_details.date_washed','wash_details.time_washed','wash_details.status','wash_details.payment_status','wash_details.otp', 'wash_details.payment_details', 'wash_details.amount', 'wash_details.total_amount', 'wash_details.driver_name', 'wash_details.driver_isd_code', 'wash_details.driver_phone', 'wash_details.is_free_wash', 'wash_details.wash_type_id', 'wash_details.keys_collected', 'wash_details.image', 'wash_details.discount', 'cwo_master.cwo_company', 'cwo_master.cwo_isd', 'cwo_master.cwo_phone', 'currency_masters.symbol')
        ->leftJoin('cwo_master', 'cwo_master.id', '=', 'wash_details.cwo_id')
        ->leftJoin('currency_masters', 'currency_masters.id', '=', 'cwo_master.currency_id')
        ->where('wash_details.car_id', $car_id)
        ->orderBy('wash_details.id', 'desc');
        $dataCount = $data->count();
        $data = $data->limit($per_page)->offset($total_viewed);
        $data = $data->get(); 
        // echo "<pre>";print_r($data->toArray());exit;   
        /***************** today ends *********************/ 

        $dataDisplay=[];
        $dataArray = [];
        if($data != ''){
            foreach ($data as $d) {
                $dataDisplay['id'] = $d->id;

                $dataDisplay['cwo_company'] = $d->cwo_company;    
                if($d->cwo_phone != ''){
                    $dataDisplay['cwo_phone'] = '+' . $d->cwo_isd . $d->cwo_phone;
                } else {
                    $dataDisplay['cwo_phone'] = '';  
                }

                if($d->date_washed != '') {
                    $dataDisplay['date_washed']  = date("d/m/Y", strtotime($d->date_washed)); 
                } else {
                    $dataDisplay['date_washed']  = '';
                }
                if($d->time_washed != '') {
                    $dataDisplay['time_washed']  = date("h:i a", strtotime($d->time_washed)); 
                } else {
                    $dataDisplay['time_washed']  = '';
                }
                
                if($d->payment_status == 1){
                    $dataDisplay['payment_status'] = 'Paid';    
                } else {
                    $dataDisplay['payment_status'] = 'Not Paid';   
                }
                if($d->status == 0){
                    $dataDisplay['status'] = 'Car in-queue';    
                }
                if($d->status == 1){
                    $dataDisplay['status'] = 'In Wash Bay';    
                }
                if($d->status == 2){
                    $dataDisplay['status'] = 'Finishing Bay';    
                }
                if($d->status == 3){
                    $dataDisplay['status'] = 'Car Wash Completed';    
                }
                if($d->status == 4){
                    $dataDisplay['status'] = 'Cancelled';    
                }
                if($d->status == 5){
                    $dataDisplay['status'] = 'Keys Collected';    
                }
                if($d->is_free_wash == 1) {
                    $dataDisplay['is_free_wash'] = true;
                }
                if($d->is_free_wash == 0) {
                    $dataDisplay['is_free_wash'] = false;
                }
                $dataDisplay['otp'] = $d->otp;
                $dataDisplay['payment_mode'] = $d->payment_details;
                $dataDisplay['wash_amount'] = $d->amount;
                $dataDisplay['total_amount'] = $d->total_amount;
                $dataDisplay['discount_value_in_percentage'] = $d->discount;

                if($d->keys_collected != ''){
                    $dataDisplay['keys_collected']  = date("d/m/Y", strtotime($d->date_washed));
                } else {
                    $dataDisplay['keys_collected'] = '';
                } 

                $optionalExtra = OptionalExtra::where('wash_id', $d->id)->select('optional_extra', 'price')->orderBy('id', 'asc')->get();
                $dataDisplay['extras'] = $optionalExtra;  

                $cleaners = CleanerWash::select('cleaner_masters.name', 'cleaner_washes.description as cleaning_description')
                            ->join('cleaner_masters', 'cleaner_masters.id', '=', 'cleaner_washes.cleaner_id')
                            ->where('cleaner_washes.wash_id', $d->id)
                            ->orderBy('cleaner_washes.id', 'asc')
                            ->get();
                $dataDisplay['cleaners'] = $cleaners;

                $wash_types = WashTypeToWash::select('wash_categories.wash_name', 'wash_type_to_washes.price')
                            ->join('wash_categories', 'wash_categories.id', '=', 'wash_type_to_washes.wash_type_id')
                            ->where('wash_type_to_washes.wash_id', $d->id)
                            ->orderBy('wash_type_to_washes.id', 'asc')
                            ->get();
                $dataDisplay['wash_types'] = $wash_types;

                if($d->wash_type_id > 0){
                    $getWashType = WashCategory::where('id', $d->wash_type_id)->select('wash_name')->first();
                    if($getWashType != ''){
                        $dataDisplay['wash_name'] = $getWashType->wash_name;    
                    } else {
                        $dataDisplay['wash_name'] = '';
                    }
                } else {
                    $dataDisplay['wash_name'] = '';
                }

                $dataDisplay['currency'] = $d->symbol;

                $dataArray[] = $dataDisplay;
            }
        }

        return response()->json([
            'success' => 1,
            'message' => 'Success',
            'car_registration_no' => $carDetails->car_registration_no,
            'make' => $carDetails->make,
            'count' => $dataCount,
            'washHistory' => $dataArray
        ]);

    }

    // public function getCarLoyalty(Request $request){
    //     $validate = Validator::make(
    //         $request->all(),
    //         [
    //             'car_id' => 'required'
    //         ],
    //         [
    //             'car_id.required' => 'Please enter car id'
    //         ]
    //     );
    //     if($validate->fails()) {
    //         $errorString = implode(",", $validate->messages()->all());
    //         return response()->json([
    //             'success' => 0,
    //             'message' => $errorString,
    //         ]);
    //     }
    //     $car_id = $request->input('car_id');



    //     /* Loyalty Starts */
    //     $is_free_wash = false;
    //     $loyalty_name = '';
    //     $loyalty_type = '';
    //     $no_of_paid_wash = '';
    //     $loyalty_type_text = '';
    //     $discount_value_in_percentage = '';
    //     $getLastWash = WashDetail::select('cwo_id')->where('car_id', $car_id)->orderBy('id', 'desc')->take(1)->get();
    //     // echo "<pre>";print_r($getLastWash->toArray());exit;
    //     // echo $getLastWash->count();exit;
    //     if($getLastWash->count() > 0){
    //         $cwo_id = $getLastWash[0]['cwo_id'];
    //         $getLoyalty = Loyalty::where('cwo_id', $cwo_id)->where('is_active', 1)->first();
    //         // print_r($getLoyalty);exit;
    //         if($getLoyalty != ''){
    //             $no_of_paid_wash = $getLoyalty->no_of_paid_wash;
    //             // echo $no_of_paid_wash;exit;
    //             $loyalty_name = $getLoyalty->loyalty_name;
    //             $loyalty_type = $getLoyalty->loyalty_type;
    //             if($loyalty_type == 1){
    //                 $loyalty_type_text = "Free Wash";
    //             }
    //             if($loyalty_type == 2){
    //                 $loyalty_type_text = "Price Discount";
    //             }
    //             $discount_value_in_percentage = $getLoyalty->discount_value;

    //             $getLastFreeWash = WashDetail::where('car_id', $car_id)->where('cwo_id', $cwo_id)->where('is_free_wash', 1)->orderBy('id', 'desc')->take(1)->get();
    //             // print_r($getLastFreeWash->toArray());exit;
    //             // echo count($getLastFreeWash);exit;
    //             if(count($getLastFreeWash) > 0){
    //                 // echo 'first wash->';exit;
    //                 $getWashCount = WashDetail::where('car_id', $car_id)->where('cwo_id', $cwo_id)->where('is_free_wash', 0)->where('status', 3)->where('id', '>', $getLastFreeWash[0]->id)->count();
                    
    //             } else {
    //                 // echo 'second wash->';exit;
    //                 $getWashCount = WashDetail::where('car_id', $car_id)->where('cwo_id', $cwo_id)->where('is_free_wash', 0)->where('status', 3)->count();
                    
    //             }
    //             // echo $getWashCount;exit;
    //             // if($getWashCount == $no_of_paid_wash){
    //             //     $is_free_wash = true;    
    //             // }
    //             if($getWashCount >= $no_of_paid_wash){
    //                 $is_free_wash = true;    
    //             }
    //         }
    //     }
    //     // echo $is_free_wash;exit;
    //     // echo "no loyalty";exit;
    //     /* Loyalty ends */
    //     return response()->json([
    //         'success' => 1,
    //         'message' => 'Success',
    //         'is_free_wash' => $is_free_wash,
    //         'loyalty_name' => $loyalty_name,
    //         'loyalty_type' => $loyalty_type,
    //         'loyalty_type_text' => $loyalty_type_text,
    //         'no_of_paid_wash' => $no_of_paid_wash,
    //         'discount_value_in_percentage' => $discount_value_in_percentage
    //     ]);
    // }

    public function removeCar(Request $request){
        $validate = Validator::make(
            $request->all(),
            [
                'car_id' => 'required'
            ],
            [
                'car_id.required' => 'Please enter car id'
            ]
        );
        if($validate->fails()) {
            $errorString = implode(",", $validate->messages()->all());
            return response()->json([
                'success' => 0,
                'message' => $errorString,
            ]);
        }
        $car_id = $request->input('car_id');

        $record = CarOwnerCar::findorfail($car_id); // fetch the record
        $record->is_display = "0";
        $record->save();

        return response()->json([
            'success' => 1,
            'message' => 'Success',
        ]);
    }

    public function getCarLoyalty(Request $request){
        $validate = Validator::make(
            $request->all(),
            [
                'co_id' => 'required'
            ],
            [
                'co_id.required' => 'Please enter car owner id'
            ]
        );
        if($validate->fails()) {
            $errorString = implode(",", $validate->messages()->all());
            return response()->json([
                'success' => 0,
                'message' => $errorString,
            ]);
        }
        $co_id = $request->input('co_id');

        $coDetails = CarOwner::findorfail($co_id);
        $isd_code = $coDetails->isd_code;
        $co_phone = $coDetails->co_phone;
        // echo $isd_code . '-' . $co_phone;exit;

        $getCwoFromWash = WashDetail::select('cwo_id')
                                    ->where('driver_isd_code', $isd_code)
                                    ->where('driver_phone', $co_phone)
                                    ->groupBy('cwo_id')
                                    ->get();
        $cwoCount = $getCwoFromWash->count();
        // print_r($getCwoFromWash->toArray());exit;
        $dataDisplay=[];
        $dataArray = [];
        if($cwoCount > 0){
            foreach($getCwoFromWash as $d) { 
                $cwo_id = $d->cwo_id; 
                $cwoDetails = CarWashOwner::findorfail($cwo_id);
                $dataDisplay['cwo_id'] = $cwo_id;
                $dataDisplay['cwo_company'] = $cwoDetails->cwo_company;
                $dataDisplay['cwo_phone'] = '+' . $cwoDetails->cwo_isd . $cwoDetails->cwo_phone;
                $dataDisplay['cwo_email'] = $cwoDetails->cwo_email;
                $dataDisplay['cwo_business_details'] = $cwoDetails->cwo_business_details;
                $dataDisplay['address'] = $cwoDetails->address;
                $dataDisplay['lat'] = $cwoDetails->lat;
                $dataDisplay['long'] = $cwoDetails->long;
                $dataDisplay['is_free_wash'] = false;
                $dataDisplay['loyalty_name'] = '';
                $dataDisplay['loyalty_type'] = '';
                $dataDisplay['loyalty_type_text'] = '';
                $dataDisplay['no_of_paid_wash'] = '';
                $dataDisplay['discount_value_in_percentage'] = '';
                $getLoyalty = Loyalty::where('cwo_id', $cwo_id)->where('is_active', 1)->first();
                if($getLoyalty != ''){
                    $no_of_paid_wash = $getLoyalty->no_of_paid_wash;
                    // echo $no_of_paid_wash;exit;
                    $loyalty_name = $getLoyalty->loyalty_name;
                    $loyalty_type = $getLoyalty->loyalty_type;
                    if($loyalty_type == 1){
                        $loyalty_type_text = "Free Wash";
                    }
                    if($loyalty_type == 2){
                        $loyalty_type_text = "Price Discount";
                    }
                    $discount_value_in_percentage = $getLoyalty->discount_value;

                    if($co_phone != '' && $isd_code != ''){
                        $getWash = WashDetail::where('driver_isd_code', $isd_code)
                                    ->where('driver_phone', $co_phone)
                                    ->where('cwo_id', $cwo_id)
                                    // ->where('is_free_wash', 0)
                                    // ->where('status', 3)
                                    ->where('is_loyalty_utilized', 0)
                                    ->where(function($query) {
                                        $query->where('status', 3)
                                            ->orWhere('status', 5);
                                    });
                        $getWashCount = $getWash->count();
                        if($getWashCount >= $no_of_paid_wash){
                            $dataDisplay['is_free_wash'] = true;  
                            $dataDisplay['loyalty_name'] = $loyalty_name;
                            $dataDisplay['loyalty_type'] = $loyalty_type;
                            $dataDisplay['loyalty_type_text'] = $loyalty_type_text;
                            $dataDisplay['no_of_paid_wash'] = $no_of_paid_wash;
                            $dataDisplay['discount_value_in_percentage'] = $discount_value_in_percentage;
                        }            

                        

                        // $dataArray[] = $dataDisplay;
                    }
                } // if active loyalty exists ends
                $dataArray[] = $dataDisplay;
            } // foreach ends
        } // if ends

        return response()->json([
            'success' => 1,
            'message' => 'Success',
            'loyalty' => $dataArray
        ]);


    }



    



}
