<?php

namespace App\Http\Controllers\Admin;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Models\User;
use App\Models\Languages;
use Image;
use File;

/**
 * Class UsersController.
 */
class UsersController extends Controller
{
	/**
     * @var model
     * @var langModel
     */
    protected $model;
    protected $langModel;

    /**
     * UsersController constructor.
     *
     * @param model $model
     * @param langModel $langModel
     */
    public function __construct()
    {
        $this->model = new User;
        $this->langModel = new Languages;
    }

    /**
     * User list method.
     *
     */
    public function index() 
    {
        $users = $this->model->where('user_type', 2)->get();
       	return view('admin.pages.users.list')
                ->withUsers($users);
    }

    /**
     * User status update method.
     *
     * @param $req
     *
     * @return redirection
     */
    public function status(Request $req){
    	$user_id = base64_decode($req->id);
    	$userdetails = $this->model->find($user_id);
    	if($userdetails){
    		$new_status = ($userdetails->status == 0) ? 1 : 0;
    		$this->model->find($user_id)->update(['status'=>$new_status]);
    		session()->flash('success', 'User Status Changed Successfully');
            return redirect()->route('admin.user');
    	} else {
    		session()->flash('error', 'User Not Found');
            return redirect()->route('admin.user');
    	}
    }

    /**
     * User delete method.
     *
     * @param $req
     *
     * @return redirection
     */
    public function delete(Request $req){
    	$user_id = base64_decode($req->id);
    	$userdetails = $this->model->find($user_id);
    	if($userdetails){
    		$this->model->find($user_id)->delete();

    		session()->flash('success', 'User Deleted Successfully');
            return redirect()->route('admin.user');
    	} else {
    		session()->flash('error', 'User Not Found');
            return redirect()->route('admin.user');
    	}
    }


    /**
     * User edit method.
     *
     * @param $req
     *
     * @return redirection
     */
    public function edit(Request $req){
    	$user_id = base64_decode($req->id);
    	$userdetails = $this->model->find($user_id);
    	$languages = $this->langModel->where('status', 1)->get();
    	if($userdetails){
    		return view('admin.pages.users.edit', compact('userdetails', 'languages'))
                    ->withUserdetails($userdetails)
                    ->withLanguages($languages);
    	} else {
    		session()->flash('error', 'User Not Found');
            return redirect()->route('admin.user');
    	}
    }


    /**
     * User details update method.
     *
     * @param $req
     *
     * @return redirection
     */
    public function update(Request $req){
    	$user_id = base64_decode($req->id);
    	$userdetails = $this->model->find($user_id);
    	if($userdetails){
        	/**
        	*post operation
        	**/
        	if($req->post()){
        		$req->validate([
    			    'username' => 'required|max:255',
                    'profile_pic' => 'mimes:jpeg,jpg,png,gif|max:10000'
    			]);
        		/**
    	    	*Image upload operation
    	    	**/
    			$filename = '';
                if($req->file('profile_pic')){
                	if($req->file('profile_pic')->isValid()){
                		if (File::exists(public_path('storage/avatars/'.$userdetails->profile_pic))) {
    				        unlink(public_path('storage/avatars/'.$userdetails->profile_pic));//unlik uploaded file
    				    }
    	            	$file = $req->file('profile_pic');
    					$filename = time().str_random(5).'.'.$file->getClientOriginalExtension();
    	                $path = 'avatars';
    	                $destination = public_path('storage/avatars');
    	                $upload_location = $path.'/'.$filename;
    	                $imageData = $req->image;
    			        $imageName = time();
    					$image_array_1 = explode(";", $imageData);
    					$image_array_2 = explode(",", $image_array_1[1]);
    					$imageData = base64_decode($image_array_2[1]);
    					$imageFullName = $imageName . '.png';
    					$getimagesize = getimagesizefromstring($imageData);
    					file_put_contents($destination.'/'.$filename, $imageData);
                	}
                }
                $update_arr = [
                	'username' => $req->username,
                	'language_id' => $req->language_id,
                ];
                if($filename){
                	$update_arr['profile_pic'] = $filename;
                }
                $this->model->find($user_id)->update($update_arr);
                session()->flash('success', 'User Details Updated Successfully');
                return redirect()->route('admin.user');
        	}
    	} else {
    		session()->flash('error', 'User Not Found');
            return redirect()->route('admin.user');
    	}
    }
}
