<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\User;
use Carbon\Carbon;
use DB;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Validator;
use File;
use App\Traits\Upload;
use Illuminate\Support\Facades\Storage;
use Auth;

class UserController extends Controller
{
    use Upload; //add this trait

    public function __construct(){
    }


    public function index(){
    }

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

        $user_id = $request->input('user_id');
        $record = User::findorfail($user_id);
        // echo "<pre>";print_r($record->toArray());exit;
        return response()->json([
            'success' => 1,
            'message' => 'Success',
            'name' => $record->name,
            'email' => $record->email,
            'phone' => $record->phone,
            'address' => $record->address,
            // 'image' => asset('storage') . '/' . $record->image,
            'image' => asset('images/user') . '/' . $record->image,
        ]);

    }

    public function update(Request $request){
        $validate = Validator::make($request->all(), 
            [
                'user_id' => 'required',
                'name' => 'required',
                'email' => 'required|email',
                'phone' => 'required',
                'address' => 'required',
            ]);
            
        if($validate->fails()){
            $errorString = implode(",",$validate->messages()->all());
            return response()->json([
                'success' => 0,
                // 'message' => $validate->errors(),
                'message' => $errorString,
            ]);
        }

        $user_id = $request->input('user_id');
        $name = $request->input('name');
        $email = $request->input('email');
        $phone = $request->input('phone');
        $address = $request->input('address');
        $dt = Carbon::now();

        $checkEmail = User::where('email', $email)->where('id', '!=', $user_id)->count();
        if($checkEmail > 0){
            return response()->json([
                    'success' => 0,
                    'message' => 'This Email already exists for another user.',
                ]);
        }

        $data = User::where('id', $user_id)->first();
        $image = $data->image;
        /*if ($request->hasFile('image')) {
            // echo 'image';exit;
            $image = $request->file('image');
            $imageName = time() . '.' . $image->extension();
            // $image->move(public_path('upload'), $imageName);

            $image = $this->UploadFile($request->file('image'), 'user');
            // dd($image);
        }
        // dd($image);*/

        // echo $path = getcwd();exit;
        // base64 starts
        /*if($request->input('image') != ''){
            $uniqueid = uniqid();
            $image = 'user' . $uniqueid . '.png';
            // define('UPLOAD_DIR', 'E:\xampp\htdocs\autoclick\public\images\user\user');
            define('UPLOAD_DIR', '/home/karmickdev/public_html/autoclick/public/images/user/user');
            // foreach ($_REQUEST['image'] as $value) {
            // $img = $value;
            // $img = $_REQUEST['image'];
            $img = $request->input('image');
            // $img = str_replace('data:image/jpeg;base64,', '', $img);
            $img = str_replace('data:img/png;base64,', '', $img);
            $img = str_replace('data:img/jpg;base64,', '', $img);
            $img = str_replace('data:img/jpeg;base64,', '', $img);
            $idt = base64_decode($img);
            $file = UPLOAD_DIR . $uniqueid . '.png';
            $success = file_put_contents($file, $idt);
            // $idt1[] = $file;
            // $idt1 = $file;
            // }
            // echo json_encode($idt1);
            // exit;
        }*/
        // base64 ends

        if ($request->hasFile('image')) {
            $image = time() . '.' . $request->file('image')->extension();
            $path = $request->file('image')->move(public_path('images/user/'), $image);
        }

        
        if($data != ''){
            $data->update([
                'name'=> $name,
                'email'=> $email,
                'phone'=> $phone,
                'address'=> $address,
                'image'=> $image,
                'updated_at'=>$dt->toDayDateTimeString()
            ]);
            return response()->json([
                    'success' => 1,
                    'message' => 'Success'
                ]);
                
        } else {
            return response()->json([
                    'success' => 0,
                    'message' => 'This user ID does not exist in the system.',
                ]);

        }
    }

    public function changePassword(Request $request){
        $validate = Validator::make($request->all(), 
            [
                'user_id' => 'required',
                'old_password' => 'required',
                'new_password' => 'required|confirmed',
                // 'new_password' => [
                //             'required',
                //             'confirmed',
                //             'string',
                //             'min:8',             // must be at least 8 characters in length
                //             'regex:/[a-z]/',      // must contain at least one lowercase letter
                //             'regex:/[A-Z]/',      // must contain at least one uppercase letter
                //             'regex:/[0-9]/',      // must contain at least one digit
                //             'regex:/[!@#$%^&*()]/', // must contain a special character
                //         ],
            ],[
                'user_id.required' => 'Please enter user ID.',
                'old_password.required' => 'Please enter a old password.',
                'new_password.required' => 'Please enter a new password.',
                'new_password.confirmed' => 'New Password and Confirm New Password should be same.',
                // 'new_password.regex' => 'Password must contain atleast one lowercase letter, one uppercase letter, one digit & a special character.'
            ]);
            
        if($validate->fails()){
            $errorString = implode(",",$validate->messages()->all());
            return response()->json([
                'success' => 0,
                // 'message' => $validate->errors(),
                'message' => $errorString,
            ]);
        }

        $user_id = $request->input('user_id');
        $old_password = $request->input('old_password');
        $new_password = $request->input('new_password');

        #Match The Old Password
        if(!Hash::check($old_password, Auth::user()->password)){
            return response()->json([
                'success' => 0,
                'message' => 'Old password does not match.',
            ]);
        }

        #Update the new Password
        User::whereId($user_id)->update([
            'password' => Hash::make($new_password)
        ]);

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

}
