<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\CarOwner;
use App\Models\CarOwnerCar;
use App\Models\BodyType;
use App\Models\WashTypeToWash;
use App\Models\WashCategory;
use App\Models\CarWashOwner;
use App\Models\CurrencyMaster;
use App\Models\Settings;
use Carbon\Carbon;
use DB;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Validator;
use Config;

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


    public function index(){
    }

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

        // $getCwo = SELECT id, ( 6371 * acos( cos( radians(18.5789) ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians(73.7707) ) + sin( radians(18.5789) ) * sin( radians( latitude ) ) ) ) AS distance FROM vechiles HAVING distance < 50 ORDER BY distance ;

        $getDistance = Settings::select('setting_value')->where('setting_id', 'cwo_lat_long_distance')->first();
        if($getDistance != ''){
            if($getDistance->setting_value != ''){
                $distance = $getDistance->setting_value;
            } else {
                $distance = 5;
            }
        } else {
            $distance = 5;
        }

        $data =  CarWashOwner::select(DB::raw("*, ( 6371 * acos( cos( radians('$latitude') ) * cos( radians( `lat` ) ) * cos( radians( `long` ) - radians('$longitude') ) + sin( radians('$latitude') ) * sin( radians( `lat` ) ) ) ) AS distance"))
                ->where('is_active', 1)
                ->where('is_paid', 1)
                ->havingRaw('distance <= '. $distance)
                ->orderBy('distance', 'asc');
        $dataCount = $data->count();
        if($dataCount == 0){
            $data =  CarWashOwner::select(DB::raw("*, ( 6371 * acos( cos( radians('$latitude') ) * cos( radians( `lat` ) ) * cos( radians( `long` ) - radians('$longitude') ) + sin( radians('$latitude') ) * sin( radians( `lat` ) ) ) ) AS distance"))
                ->where('is_active', 1)
                ->where('is_paid', 1)
                ->orderBy('distance', 'asc');    
        }
        $dataCount = $data->count();
        $data = $data->get(); 
        // echo "<pre>";print_r($data->toArray());exit;

        $dataDisplay=[];
        $dataArray = [];
        if($data != '') {
            foreach ($data as $d) {
                $dataDisplay['id'] = $d->id; 
                $dataDisplay['account_no'] = $d->account_no;
                $dataDisplay['cwo_name'] = $d->cwo_name;
                $dataDisplay['cwo_company'] = $d->cwo_company;
                $dataDisplay['cwo_isd'] = $d->cwo_isd;
                $dataDisplay['cwo_phone'] = $d->cwo_phone;
                $dataDisplay['cwo_email'] = $d->cwo_email;
                $dataDisplay['address'] = $d->address;
                $dataDisplay['lat'] = $d->lat;
                $dataDisplay['long'] = $d->long;
                $dataDisplay['allow_prebooking'] = $d->allow_prebooking;
                if($d->allow_prebooking == 1){
                    $dataDisplay['allow_prebooking_text'] = 'Yes';
                } else {
                    $dataDisplay['allow_prebooking_text'] = 'No';
                }
                $getCurrency = CurrencyMaster::where('id', $d->currency_id)->first();
                if($getCurrency != ''){
                    $dataDisplay['currency_code'] = $getCurrency->code;
                    $dataDisplay['currency_symbol'] = $getCurrency->symbol;
                } else {
                    $dataDisplay['currency_code'] = '';
                    $dataDisplay['currency_symbol'] = '';
                }
                $dataDisplay['distance'] = round($d->distance, 3) . ' km';
                

                $dataArray[] = $dataDisplay;
            }
        }
        return response()->json([
            'success' => 1,
            'message' => 'Success',
            'count' => $dataCount,
            'cwoList' => $dataArray
        ]);

    }

    public function getWashTypes(Request $request){
         $validate = Validator::make($request->all(), 
            [
                'cwo_id' => 'required',
                'body_type_id' => 'required',
            ]);
            
        if($validate->fails()){
            $errorString = implode(",",$validate->messages()->all());
            return response()->json([
                'success' => 0,
                // 'message' => $validate->errors(),
                'message' => $errorString,
            ]);
        }

        $cwo_id = $request->input('cwo_id');
        $body_type_id = $request->input('body_type_id');

        $data =WashCategory::select('wash_categories.wash_name','wash_categories.wash_desc','wash_category_body_types.price','wash_category_body_types.wash_category_id')
                    ->join('wash_category_body_types','wash_categories.id','=','wash_category_body_types.wash_category_id')
                    ->where('wash_categories.cwo_id', $cwo_id)
                    ->where('wash_category_body_types.body_type_id', $body_type_id)
                    ->where('wash_categories.is_active', 1)
                    ->orderBy('wash_categories.wash_name', 'asc')
                    ->get();
        return response()->json([
            'success' => 1,
            'message' => 'Success',
            'washCategories' => $data
        ]);            

    }

    public function cwoDetails(Request $request){
        $validate = Validator::make($request->all(), 
            [
                'cwo_id' => 'required'
            ]);
            
        if($validate->fails()){
            $errorString = implode(",",$validate->messages()->all());
            return response()->json([
                'success' => 0,
                'message' => $errorString,
            ]);
        }

        $cwo_id = $request->input('cwo_id');

        $cwoDetails =CarWashOwner::select('cwo_name','cwo_company','cwo_business_details','address','cwo_isd','cwo_phone','cwo_email')->where('id', $cwo_id)->first();
        $washCategories =WashCategory::select('wash_name','wash_desc')->where('cwo_id', $cwo_id)->get();

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



}
