<?php

namespace App\Http\Controllers\Api;

use Illuminate\Http\Request;
use App\Exceptions\GeneralException;
use App\Http\Controllers\Controller;
use App\Repositories\Auth\UserRepository;
use Image;
use Hash;

/**
 * Class UserApiController.
 */
class UserApiController extends Controller
{
    /**
     * @var UserRepository
     */
    protected $userRepository;
    protected $circleUserTempRepository;
    protected $circleUserRepository;
    protected $circleRepository;

    /**
     * UserApiController constructor.
     *
     * @param UserRepository $userRepository
     */
    public function __construct(UserRepository $userRepository)
    {
        $this->userRepository = $userRepository;
    }

    
    /**
     * Update user profile.
     *
     * @param Json ApiRequest $request
     *
     * @return \Illuminate\Http\JsonResponse
     * @throws GeneralException
     */
    public function profile_update(Request $request)
    {
        $response = array();
        $output = array();
        $message = "Successful";
        $json = file_get_contents('php://input');
        $obj = json_decode($json, TRUE);
        //print_r($jsonRequest);die();
        $first_name = isset($obj['first_name']) ? $obj['first_name'] : "";
        $last_name = isset($obj['last_name']) ? $obj['last_name'] : "";
        $password = (isset($obj['password']) ? $obj['password'] : '');
        //$dob = isset($obj['dob']) ? date('Y-m-d',strtotime($obj['dob'])) : "";
        $dob = date('Y-m-d',strtotime(str_replace('/', '-', $obj['dob'])));
        $iban = isset($obj['iban']) ? $obj['iban'] : "";
        $credit_card_no = isset($obj['credit_card_no']) ? $obj['credit_card_no'] : "";
        $paypal_account = isset($obj['paypal_account']) ? $obj['paypal_account'] : "";
        $id_scan = isset($obj['id_scan']) ? $obj['id_scan'] : "";
        $avatar_location = isset($obj['avatar_location']) ? $obj['avatar_location'] : "";
        $authorization = explode('Bearer ', $request->header('Authorization'));
        $authorization = end($authorization);

        if($authorization && $first_name && $last_name && $dob) {
            $user = $this->userRepository->findByCondition(array('remember_token'=>$authorization));
            //echo '<pre>';print_r($user);die;
            if(count($user) > 0) {
                if($id_scan) {
                    $id_scan_name = explode('/', $id_scan);
                    $id_scan_name = end($id_scan_name);
                    @rename (public_path('storage/id_scan_temp/'.$id_scan_name), public_path('storage/id_scan/'.$id_scan_name));
                }
                if($avatar_location) {
                    $avatar_location_name = explode('/', $avatar_location);
                    $avatar_location_name = end($avatar_location_name);
                    @rename (public_path('storage/avatars_temp/'.$avatar_location_name), public_path('storage/avatars/'.$avatar_location_name));
                }
                $update_arr = [
                    'first_name'   => $first_name,
                    'last_name'   => $last_name,
                    'dob'   => $dob,
                    'iban'   => $iban,
                    'credit_card_no'   => $credit_card_no,
                    'paypal_account'   => $paypal_account,
                ];

                if($password != ''){
                    $update_arr['password'] =  Hash::make($password);
                }
                if($id_scan){
                    $update_arr['id_scan'] = str_replace('id_scan_temp', 'id_scan', $id_scan);
                }
                if($avatar_location){
                    $update_arr['avatar_location'] = str_replace('avatars_temp', 'avatars', $avatar_location);
                }
                $userUpdate = $this->userRepository->updateByCondition(array('remember_token'=>$authorization), $update_arr);
                if($userUpdate) {
                    $currentuser = $this->userRepository->findByCondition(array('remember_token'=>$authorization));
                    $status = 100;
                    $statusCode = 200;
                    $message = "Successful";
                    $output = $currentuser[0];
                    $output['dob'] = date('d/m/Y', strtotime($currentuser[0]->dob));
                } else {
                    $status = 300;
                    $statusCode = 402;
                    $message = "Sorry something wrong !!!";
                }
            } else {
                $status = 300;
                $statusCode = 401;
                $message = "Unauthenticated user";
            }
        } else {
            $status = 300;
            $statusCode = 404;
            $message = "Please fill all the required fields";
        }
        $response = array('status'=>$status, 'message'=>$message, 'result'=>$output);
        return response()->json($response);
    }



    /**
     * Upload file.
     *
     * @param Json ApiRequest $request
     *
     * @return \Illuminate\Http\JsonResponse
     * @throws GeneralException
     */
    public function upload_file(Request $request)
    {
        $response = array();
        $output = array();
        $flag = $request->input('flag');
        $file = $request->file('file_name');
        
        if($file) {
            $upload_location = null;
            if ($file) {
                $name = time().str_random(5).'.'.$file->getClientOriginalExtension();
                if($flag==1) { //avatar image
                    $path = 'avatars_temp';
                    $destination = public_path('storage/avatars_temp');
                    $upload_location = $path.'/'.$name;
                    $img = Image::make($file->getRealPath());
                    $img->resize(260, 260, function ($constraint) {
                        $constraint->aspectRatio();
                    })->save($destination.'/'.$name);
                } else { //id scan copy
                    $upload_location = $file->storeAs('/id_scan_temp', time().str_random(5).'.'.$file->getClientOriginalExtension(), 'public');
                }
            }
            if($upload_location) {
                $status = 100;
                $statusCode = 200;
                $message = $upload_location;
            } else {
                $status = 300;
                $statusCode = 401;
                $message = "Not uploaded";
            }
        } else {
            $status = 300;
            $statusCode = 404;
            $message = "Please put a image file";
        }
        $response = array('status'=>$status, 'message'=>$message, 'result'=>$output);
        
        return response()->json($response);
    }

    
}
