<?php

namespace App\Http\Controllers\Api\V2;

use Illuminate\Http\Request;
use App\Exceptions\GeneralException;
use App\Http\Controllers\Controller;
use App\Repositories\Auth\UserRepository;
use App\Repositories\Auth\UserDeviceTokenRepository;
use App\Repositories\SiteSettingsRepository;
use App\Repositories\TermsConditionRepository;
use App\Repositories\UserTermsLogRepository;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Hash;

/**
 * Class AuthApiControllerV2.
 */
class AuthApiControllerV2 extends Controller
{
    /**
     * @var UserRepository
     * @var UserDeviceTokenRepository
     * @var SiteSettingsRepository
     * @var TermsConditionRepository
     * @var UserTermsLogRepository
     */
    protected $userRepository;
    protected $userDeviceTokenRepository;
    protected $siteSettingsRepository;
    protected $termsConditionRepository;
    protected $userTermsLogRepository;

    /**
     * AuthApiController constructor.
     *
     * @param UserRepository $userRepository
     * @param UserRepository $userDeviceTokenRepository
     */
    public function __construct(UserRepository $userRepository, UserDeviceTokenRepository $userDeviceTokenRepository, SiteSettingsRepository $siteSettingsRepository, TermsConditionRepository $termsConditionRepository, UserTermsLogRepository $userTermsLogRepository)
    {
        $this->userRepository = $userRepository;
        $this->userDeviceTokenRepository = $userDeviceTokenRepository;
        $this->siteSettingsRepository = $siteSettingsRepository;
        $this->termsConditionRepository = $termsConditionRepository;
        $this->userTermsLogRepository = $userTermsLogRepository;
    }

    /**
     * Get Terms conditions.
     *
     * @param Json ApiRequest $request
     *
     * @return \Illuminate\Http\JsonResponse
     * @throws GeneralException
     */
    public function getTerms(Request $request)
    {
        $response = array();
        $output = array();

        $terms = $this->termsConditionRepository->findByCondition();
        if($terms) {
            $status = 100;
            $statusCode = 200;
            $output = $terms;
            $message = "Successful";
        } else {
            $status = 300;
            $statusCode = 402;
            $message = "Sorry something wrong !!!";
        }
        $response = array('status'=>$status, 'message'=>$message, 'result'=>$output);
        return response()->json($response);
    }

    /**
     * Accept terms conditions and store log.
     *
     * @param Json ApiRequest $request
     *
     * @return \Illuminate\Http\JsonResponse
     * @throws GeneralException
     */
    public function acceptTerms(Request $request)
    {
        $response = array();
        $output = array();
        $json = file_get_contents('php://input');
        $obj = json_decode($json, TRUE);
        //print_r($obj);die();
        $terms_id = $obj['terms_id'];
        $authorization = explode('Bearer ', $request->header('Authorization'));
        $authorization = end($authorization);

        if($terms_id && $authorization) {
            $user_authorize = $this->userRepository->findByCondition(array('remember_token'=>$authorization));
            //print_r($authorization);die;
            if(count($user_authorize) > 0) {
                $user = $this->userRepository->findByCondition(array('remember_token'=>$authorization));        
                if(count($user) > 0) {
                    $create_arr = [
                        'user_id'   => $user[0]->id,
                        'terms_condition_id' => $terms_id
                    ];
                    $user = $this->userTermsLogRepository->create($create_arr);
                    if($user) {
                        $status = 100;
                        $statusCode = 200;
                        $message = 1010;
                    } else {
                        $status = 300;
                        $statusCode = 402;
                        $message = 1008;
                    }
                } else {
                    $status = 300;
                    $statusCode = 401;
                    $message = 1011;
                }
            } else {
                $status = 300;
                $statusCode = 401;
                $message = 1001;
            }
            
        } else {
            $status = 300;
            $statusCode = 404;
            $message = 1012;
        }
        $response = array('status'=>$status, 'message'=>$message, 'result'=>$output);
        return response()->json($response);
    }
}
