<?php

namespace App\Http\Controllers\Api\v1\Profile;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Http\Controllers\Api\BaseController as BaseController;
use Illuminate\Support\Facades\Auth;
use App\Models\User;
use App\Models\UserInfo;
use App\Models\Services;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
use Validator;
use Exception;
use Mail;

class ProfileController extends Controller
{
   protected $baseController;

    public function __construct(BaseController $baseController)
    {

        $this->baseController = $baseController;
        if(Auth::guard('api')->check()){
        $this->user_id=auth('api')->user()->id;
        $this->name=auth('api')->user()->name;
        $this->email=auth('api')->user()->email;
        }
    }

    public function getProfile(Request $request){
      
    	$inputs = $request->all();
    	$messageArr['input'] = $inputs;
    	$status_code = 0;
    	$success = []; 
    	$successMsg=false;
    	try{
    		     
    			$successMsg=true;
    			$status_code = 1;
                $success['user_token'] = $request->bearerToken();
    			$success['name'] =$this->name;
    			$success['email'] =$this->email;
    			$userInfo=UserInfo::where('user_id',$this->user_id)->get();
    			$success['profile_image'] = $success['profile_image'] = !empty($userInfo[0]['profile_image']) && file_exists(public_path('storage/images/api/').$userInfo[0]['profile_image']) ? url('storage/images/api').'/'.$userInfo[0]['profile_image'] : "" ;
    			$success['mobile_no'] = !empty($userInfo[0]['mobile_no'])  && $userInfo[0]['mobile_no']!="null" ? $userInfo[0]['mobile_no'] : "" ;
    			$success['address'] = !empty($userInfo[0]['address']) && $userInfo[0]['address']!="null" ? $userInfo[0]['address'] : "" ;
                $success['zip'] = !empty($userInfo[0]['zip'])  && $userInfo[0]['zip']!="null" ? $userInfo[0]['zip'] : "" ;
    			return $this->baseController->sendResponse($status_code, $successMsg,$success,'success', 200, $messageArr);
    	}catch (Exception $e){         
    		return $this->baseController->sendResponse(0,false,[],$e->getMessage(), 200, $messageArr??[]);
    	}
    } 

    public function updateProfile(Request $request){
    	$inputs = $request->all();
    	$messageArr['input'] = $inputs;
    	$status_code = 0;
    	$success = []; 
    	$successMsg=false;
    	try{
             $customMessages = [
                'profile_image.mimes'=>'Image should be JPG, JPEG, PNG', 
                'mobile_no.max'=>'Please put maximum 15 digit mobile number',
                'address.max'=>'The address may not be greater than 200 characters.',
                'zip.zip'=>'The zip may not be greater than 30 characters.',           
            ];
    		$validator  =  Validator::make($inputs,[
                'name'=>'required|string|max:50',
    			'profile_image' => 'nullable|mimes:jpeg,jpg,png|max:5120',
    			'mobile_no' => 'nullable|string|max:15',
    			'address' => 'nullable|max:200',
    			'zip' => 'nullable|max:30',
    		],$customMessages);
    		if($validator->passes()){
                $successMsg=true;
                $status_code = 1;
                $success['user_token'] = $request->bearerToken();
                $success['name'] =$this->name;
                $success['email'] =$this->email;
    			if($request->file('profile_image')){
    			$image = $request->file('profile_image');
    			$root=public_path('/storage/images');
    			$file=$this->baseController->uploadImage($image,$root);
                UserInfo::where('user_id',$this->user_id)->update(['profile_image' =>$file,'mobile_no'=>$request->mobile_no,'address'=>$request->address,'zip'=>$request->zip]);
                }else{
                UserInfo::where('user_id',$this->user_id)->update(['mobile_no'=>$request->mobile_no,'address'=>$request->address,'zip'=>$request->zip]);  
                }

                User::where('id',$this->user_id)->update(['name'=>$request->name]);
                $user=User::where('id',$this->user_id)->get();
                $success['name'] = !empty($user[0]['name']) && $user[0]['name']!="null" ? $user[0]['name'] : "" ;  

    			$userInfo=UserInfo::where('user_id',$this->user_id)->get();
    			$success['profile_image'] = !empty($userInfo[0]['profile_image']) && file_exists(public_path('storage/images/api/').$userInfo[0]['profile_image']) ? url('storage/images/api').'/'.$userInfo[0]['profile_image'] : "" ;

    			$success['mobile_no'] = !empty($userInfo[0]['mobile_no']) && $userInfo[0]['mobile_no']!="null" ? $userInfo[0]['mobile_no'] : "" ;
    			$success['address'] = !empty($userInfo[0]['address']) && $userInfo[0]['address']!="null" ? $userInfo[0]['address'] : "" ;
                $success['zip'] = !empty($userInfo[0]['zip']) && $userInfo[0]['zip']!="null" ? $userInfo[0]['zip'] : "" ;
                

    			return $this->baseController->sendResponse($status_code, $successMsg,$success,'success', 200, $messageArr);

    		}else{
    			return $this->baseController->sendResponse($status_code, $successMsg,$success,$validator->messages()->first(), 200, $messageArr);
    		}
    	}catch (Exception $e){         
    		return $this->baseController->sendResponse(0,false,[],$e->getMessage(), 200, $messageArr??[]);
    	}  


    } 
    public function userDashboard(Request $request){
      
        $inputs = $request->all();
        $messageArr['input'] = $inputs;
        $status_code = 0;
        $success = []; 
        $successMsg=false;
        try{
            $successMsg=true;
            $status_code = 1; 
            $userService=Services::where('user_id',$this->user_id)->get();

            $success['fire_brigade']= !empty($userService[0]['fire_brigade']) ? $userService[0]['fire_brigade'] : "";
            $success['ambulance']= !empty($userService[0]['ambulance']) ? $userService[0]['ambulance'] : "";
            $success['police_station']= !empty($userService[0]['police_station']) ? $userService[0]['police_station'] : "";

            $success['sos']=array(!empty($userService[0]['sos_no1']) ? $userService[0]['sos_no1'] : "",!empty($userService[0]['sos_no2']) ? $userService[0]['sos_no2'] : "",!empty($userService[0]['sos_no3']) ? $userService[0]['sos_no3'] : "",!empty($userService[0]['sos_no4']) ? $userService[0]['sos_no4'] : "");

        return $this->baseController->sendResponse($status_code, $successMsg,$success,'All Services', 200, $messageArr);
        die();

        }catch (Exception $e){         
            return $this->baseController->sendResponse(0,false,[],$e->getMessage(), 200, $messageArr??[]);
        } 
          
    }
    public function changePassword(Request $request){
        $inputs = $request->all();
        $messageArr['input'] = $inputs;
        $status_code = 0;
        $success = []; 
        $successMsg=false;
        try{
            $validator  =  Validator::make($inputs,[
                'old_password' => 'required',
                'new_password' => 'required|min:6'
            ]);
            if($validator->passes()){
                $oldPassword=$request->old_password;
                $newPassword=$request->new_password;
                if($oldPassword === $newPassword){
                    return $this->baseController->sendResponse($status_code, $successMsg,$success,'New password must be different from old pasword', 200, $messageArr);
                    die();
                }
                else{
                    $successMsg=true;
                    $status_code = 1;
                    $UserId=auth('api')->user()->id;
                    $UserPassword=DB::table('users')->where('id',$UserId)->pluck('password');
                    if(Hash::check($oldPassword , $UserPassword[0])){
                        User::where('id',$UserId)
                        ->update(['password'=>Hash::make($newPassword),'updated_at' =>date('Y-m-d H:i:s')]);
                        return $this->baseController->sendResponse($status_code, $successMsg,$success,'Password Has Been Changed', 200, $messageArr);
                    }else{
                        $status_code = 0;
                        $success = []; 
                        $successMsg=false;
                        return $this->baseController->sendResponse($status_code, $successMsg,$success,'You Have Entered Wrong Password', 200, $messageArr); 
                    }
                }

            }else{

                return $this->baseController->sendResponse($status_code, $successMsg,$success,$validator->messages()->first(), 200, $messageArr);
            }
        }catch (Exception $e){         
            return $this->baseController->sendResponse(0,false,[],$e->getMessage(), 200, $messageArr??[]);
        }
    }  
    public function sendSos(Request $request){
        $status_code = 0;
        $success = [];                    
        $inputs = $request->all();
        $messageArr['input'] = $inputs;
      try 
        {
             $successMsg=true;
             $status_code = 1;
             $success_message ="http://maps.google.com/?q=<".$request->user_location_lat.">,<".$request->user_location_long.">";
             Mail::raw($success_message, function ($success_message) {
             $success_message->to('subhabrata0605@gmail.com')
            ->subject('SOS message form '.$this->name)
            ->from('subhabrata@digitalaptech.co.in');
    
             });
             return $this->baseController->sendResponse($status_code, $successMsg,$success,$success_message, 200, $messageArr); 

        } catch (Exception $e){         
            return $this->baseController->sendResponse(0,false,[], $e->getMessage(), 200, $messageArr??[]);
        }
    }

    public function logout(Request $request)
    {
        $status_code = 0;
        $success = [];                    
        $inputs = $request->all();
        $messageArr['input'] = $inputs;
      try 
        {
             $successMsg=true;
             $status_code = 1;
             //$success['user_token'] = $request->bearerToken();
             Auth::user()->token()->revoke();
             Auth::user()->token()->delete();

             return $this->baseController->sendResponse($status_code, $successMsg,$success,'You are logged out successfully', 200, $messageArr); 

        } catch (Exception $e) {         
            return $this->baseController->sendResponse(0,false,[], $e->getMessage(), 200, $messageArr??[]);
        }
    }  
}
