<?php

namespace App\Http\Controllers\Api\V3;

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\AgreementRepository;
use App\Repositories\UserTermsLogRepository;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Hash;
use App\Models\CircleUser;
use App\Models\CircleUserTemp;

/**
 * Class AuthApiControllerV3.
 */
class AuthApiControllerV3 extends Controller
{
    /**
     * @var UserRepository
     * @var UserDeviceTokenRepository
     * @var SiteSettingsRepository
     * @var TermsConditionRepository
     * @var AgreementRepository
     * @var UserTermsLogRepository
     */
    protected $userRepository;
    protected $userDeviceTokenRepository;
    protected $siteSettingsRepository;
    protected $termsConditionRepository;
    protected $agreementRepository;
    protected $userTermsLogRepository;

    /**
     * AuthApiController constructor.
     *
     * @param UserRepository $userRepository
     * @param UserRepository $userDeviceTokenRepository
     */
    public function __construct(UserRepository $userRepository, UserDeviceTokenRepository $userDeviceTokenRepository, SiteSettingsRepository $siteSettingsRepository, TermsConditionRepository $termsConditionRepository, UserTermsLogRepository $userTermsLogRepository, AgreementRepository $agreementRepository)
    {
        $this->userRepository = $userRepository;
        $this->userDeviceTokenRepository = $userDeviceTokenRepository;
        $this->siteSettingsRepository = $siteSettingsRepository;
        $this->termsConditionRepository = $termsConditionRepository;
        $this->agreementRepository = $agreementRepository;
        $this->userTermsLogRepository = $userTermsLogRepository;
    }


    /**
     * The user has been signed up.
     *
     * @param Json ApiRequest $request
     *
     * @return \Illuminate\Http\JsonResponse
     * @throws GeneralException
     */
    public function signup(Request $request)
    {
        $response = array();
        $output = array();
        
        $json = file_get_contents('php://input');
        $obj = json_decode($json, TRUE);
        //print_r($obj);die;
        $first_name = isset($obj['first_name']) ? $obj['first_name'] : "";
        $last_name = isset($obj['last_name']) ? $obj['last_name'] : "";
        $dob = isset($obj['dob']) ? date('Y-m-d',strtotime(str_replace('/', '-', $obj['dob']))) : "";
        $email = (isset($obj['email']) ? trim($obj['email']) : '');
        $password = (isset($obj['password']) ? trim($obj['password']) : '');
        $mobile_country_code = (isset($obj['mobile_country_code']) ? $obj['mobile_country_code'] : '');
        $mobile_number = (isset($obj['mobile_number']) ? trim($obj['mobile_number']) : '');
        $device_token = (isset($obj['device_token']) ? $obj['device_token'] : '');

        if($email && $password && $mobile_number) {
            //echo '<pre>'; print_r($this->userRepository->findByCondition(array('email'=>$email)));die;
            //$email_exist = array();
            $email_exist = $this->userRepository->findByCondition(array('email'=>$email));
            $mobile_exist = $this->userRepository->findByCondition(array('mobile_number'=>$mobile_number));
            //echo count($email_exist);die;
            if(count($email_exist) == 0 && count($mobile_exist) == 0) {
                $instArr = array(
                                'first_name'   => $first_name,
                                'last_name'   => $last_name,
                                'dob'   => $dob,
                                'email'=>$email,
                                'password'=>$password,
                                'mobile_country_code'=>$mobile_country_code,
                                'mobile_number'=>$mobile_number,
                                );
                $user = $this->userRepository->create($instArr);
                if($user) {
                    $circleUsers = CircleUser::where('mobile_number', $mobile_number)->get();
                    $circleUserTemps = CircleUserTemp::where('mobile_number', $mobile_number)->get();
                    if($circleUsers){
                        foreach ($circleUsers as $key => $circleUser) {
                            $username = $circleUser->username;
                            $updated_username = $first_name.' '.$last_name;
                            if(strstr($username, '(Admin)')){
                                $updated_username = $first_name.' '.$last_name.'(Admin)';
                            }
                            CircleUser::where('mobile_number', $circleUser->mobile_number)->update(['username'=>$updated_username]);
                        }
                    }
                    if($circleUserTemps){
                        foreach ($circleUserTemps as $key => $circleUserTemp) {
                            $username = $circleUserTemp->username;
                            $updated_username = $first_name.' '.$last_name;
                            if(strstr($username, '(Admin)')){
                                $updated_username = $first_name.' '.$last_name.'(Admin)';
                            }
                            CircleUserTemp::where('mobile_number', $circleUserTemp->mobile_number)->update(['username'=>$updated_username]);
                        }
                    }
                    if($device_token){
                        $devicetokenArr = array(
                                        'user_id'=>$user->id,
                                        'device_token'=>$device_token
                                        );
                        $userdevice = $this->userDeviceTokenRepository->create($devicetokenArr);
                    }
                    /*************email********************/
                    $to = $email;
                    $email_text='   <tr>
                                       <td style="padding: 20px 10px; font-family: sans-serif; font-size: 15px; mso-height-rule: exactly; line-height: 20px;color: #333; ">
                                           <p>Dear <span style="">User</span> </p>
                                        </td>
                                    </tr>
                                    <tr>
                                        <td style="font-family: sans-serif; color: #333; padding: 0px 10px 40px; font-size: 16px; line-height: 30px;">
                                           <p>Merci d\'avoir rejoint la communauté DANT.</p>
                                           <!--<p style="font-weight:bold;">Your email and mobile verification code as follows:</p>-->
                                           <!--<p>Email Verification link: <a href="'.url('email_verification.php?code='.$user->email_verification_code).'">Click here to verify email</a></p>-->
                                           <!--<p>Mobile Verification Code: '.$user->mobile_verification_code.'</p>-->
                                        </td>
                                    </tr>
                                    <tr>
                                        <td style="font-family: sans-serif; color: #333; padding: 0px 10px 40px; font-size: 16px; line-height: 30px;">Veuillez entrer le code de vérification reçu par SMS pour valider votre compte';
                    $email_text.='      </td>
                                    </tr>
                                    <tr>
                                        <td style="font-family: sans-serif; color: #333; padding: 0px 10px 40px; font-size: 16px; line-height: 30px;">
                                           <p>Restez connectés! Nous apprécions beaucoup la confiance que vous nous accordez</p>
                                           <p>N\'hésitez pas à nous contacter pour toute information.</p>
                                        </td>
                                    </tr>';
                            //echo $to; die;
                    $data['email_text'] = $email_text;    
                    Mail::send('mail.email_template', $data, function($message) use ($to)
                    {
                        $message->from(get_from_email(), 'DANT');
                        $message->to($to);
                        $message->subject('Mail d\'inscription');
                    });

                    $sms_text = 'Code de vérification de mobile: '.$user->mobile_verification_code;
                    $sms_number = $mobile_country_code.$mobile_number;
                    $this->sendSMS($sms_text, $sms_number);
                    /*************email********************/

                    /****************admin email******************/
                    $to = get_admin_email();
                    $email_text='   <tr>
                                        <td style="font-family: sans-serif; color: #333; padding: 0px 10px 40px; font-size: 16px; line-height: 30px;">
                                           <p>Code de vérification de mobile: '.$user->mobile_verification_code.'</p>
                                        </td>
                                    </tr>';
                            //echo $to; die;
                    $data['email_text'] = $email_text;    
                    Mail::send('mail.email_template', $data, function($message) use ($to)
                    {
                        $message->from(get_from_email(), 'DANT');
                        $message->to($to);
                        $message->subject('Mail d\'inscription');
                    });
                    /****************admin email******************/
                    $status = 100;
                    $statusCode = 200;
                    $message = 1000;
                    $output = $user;
                } else {
                    $status = 300;
                    $statusCode = 401;
                    $message = 1001;
                }
            } elseif(count($email_exist) > 0){
                if($email_exist[0]->confirmed==0){
                    /*************email********************/
                    $to = $email;
                    $email_text='   <tr>
                                       <td style="padding: 20px 10px; font-family: sans-serif; font-size: 15px; mso-height-rule: exactly; line-height: 20px;color: #333; ">
                                           <p>Dear <span style="">User</span> </p>
                                        </td>
                                    </tr>
                                    <tr>
                                        <td style="font-family: sans-serif; color: #333; padding: 0px 10px 40px; font-size: 16px; line-height: 30px;">
                                           <p>Merci d\'avoir rejoint la communauté DANT</p>
                                           <!--<p style="font-weight:bold;">Your email and mobile verification code as follows:</p>-->
                                           <!--<p>Email Verification link: <a href="'.url('email_verification.php?code='.$email_exist[0]->email_verification_code).'">Click here to verify email</a></p>-->
                                           <!--<p>Mobile Verification Code: '.$email_exist[0]->mobile_verification_code.'</p>-->
                                        </td>
                                    </tr>
                                    <tr>
                                        <td style="font-family: sans-serif; color: #333; padding: 0px 10px 40px; font-size: 16px; line-height: 30px;">Veuillez entrer le code de vérification reçu par SMS pour valider votre compte';
                    $email_text.='      </td>
                                    </tr>
                                    <tr>
                                        <td style="font-family: sans-serif; color: #333; padding: 0px 10px 40px; font-size: 16px; line-height: 30px;">
                                           <p>Restez connectés! Nous apprécions beaucoup la confiance que vous nous accordez</p>
                                           <p>N\'hésitez pas à nous contacter pour toute information.</p>
                                        </td>
                                    </tr>';
                            //echo $to; die;
                    $data['email_text'] = $email_text;    
                    Mail::send('mail.email_template', $data, function($message) use ($to)
                    {
                        $message->from(get_from_email(), 'DANT');
                        $message->to($to);
                        $message->subject('Mail d\'inscription');
                    });
                    /*************email********************/

                    /****************admin email******************/
                    $to = get_admin_email();
                    $email_text='   <tr>
                                        <td style="font-family: sans-serif; color: #333; padding: 0px 10px 40px; font-size: 16px; line-height: 30px;">
                                           <p>Code de vérification de mobile: '.$email_exist[0]->mobile_verification_code.'</p>
                                        </td>
                                    </tr>';
                            //echo $to; die;
                    $data['email_text'] = $email_text;    
                    Mail::send('mail.email_template', $data, function($message) use ($to)
                    {
                        $message->from(get_from_email(), 'DANT');
                        $message->to($to);
                        $message->subject('Mail d\'inscription');
                    });
                    /****************admin email******************/
                    $mobile_verification_code = mt_rand(1000,9999);
                    $instArr = array(
                                    'mobile_verification_code'=>$mobile_verification_code
                                    );
                    $userupdate = $this->userRepository->updateByCondition(array('email'=>$email), $instArr);

                    $sms_text = 'Code de vérification de mobile: '.$mobile_verification_code;
                    $sms_number = $mobile_country_code.$mobile_number;
                    $this->sendSMS($sms_text, $sms_number);

                    $status = 100;
                    $statusCode = 200;
                    $message = 1002;
                    $output = $email_exist[0];
                } else {
                    $status = 300;
                    $statusCode = 404;
                    $message = 1003;
                }
            }  elseif(count($mobile_exist) > 0){
                if($mobile_exist[0]->confirmed==0){
                /*************email********************/
                    $to = $email;
                    $email_text='   <tr>
                                       <td style="padding: 20px 10px; font-family: sans-serif; font-size: 15px; mso-height-rule: exactly; line-height: 20px;color: #333; ">
                                           <p>Dear <span style="">User</span> </p>
                                        </td>
                                    </tr>
                                    <tr>
                                        <td style="font-family: sans-serif; color: #333; padding: 0px 10px 40px; font-size: 16px; line-height: 30px;">
                                           <p>Merci d\'avoir rejoint la communauté DANT</p>
                                           <!--<p style="font-weight:bold;">Your email and mobile verification code as follows:</p>-->
                                           <!--<p>Email Verification link: <a href="'.url('email_verification.php?code='.$mobile_exist[0]->email_verification_code).'">Click here to verify email</a></p>-->
                                           <!--<p>Mobile Verification Code: '.$mobile_exist[0]->mobile_verification_code.'</p>-->
                                        </td>
                                    </tr>
                                    <tr>
                                        <td style="font-family: sans-serif; color: #333; padding: 0px 10px 40px; font-size: 16px; line-height: 30px;">Veuillez entrer le code de vérification reçu par SMS pour valider votre compte';
                    $email_text.='      </td>
                                    </tr>
                                    <tr>
                                        <td style="font-family: sans-serif; color: #333; padding: 0px 10px 40px; font-size: 16px; line-height: 30px;">
                                           <p>Restez connectés! Nous apprécions beaucoup la confiance que vous nous accordez</p>
                                           <p>N\'hésitez pas à nous contacter pour toute information.</p>
                                        </td>
                                    </tr>';
                            //echo $to; die;
                    $data['email_text'] = $email_text;    
                    Mail::send('mail.email_template', $data, function($message) use ($to)
                    {
                        $message->from(get_from_email(), 'DANT');
                        $message->to($to);
                        $message->subject('Mail d\'inscription');
                    });
                    /*************email********************/

                    /****************admin email******************/
                    $to = get_admin_email();
                    $email_text='   <tr>
                                        <td style="font-family: sans-serif; color: #333; padding: 0px 10px 40px; font-size: 16px; line-height: 30px;">
                                           <p>Code de vérification de mobile: '.$mobile_exist[0]->mobile_verification_code.'</p>
                                        </td>
                                    </tr>';
                            //echo $to; die;
                    $data['email_text'] = $email_text;    
                    Mail::send('mail.email_template', $data, function($message) use ($to)
                    {
                        $message->from(get_from_email(), 'DANT');
                        $message->to($to);
                        $message->subject('Mail d\'inscription');
                    });
                    /****************admin email******************/
                    $mobile_verification_code = mt_rand(1000,9999);
                    $instArr = array(
                                    'mobile_verification_code'=>$mobile_verification_code
                                    );
                    $userupdate = $this->userRepository->updateByCondition(array('mobile_number'=>$mobile_number), $instArr);
                    
                    $sms_text = 'Code de vérification de mobile: '.$mobile_verification_code;
                    $sms_number = $mobile_country_code.$mobile_number;
                    $this->sendSMS($sms_text, $sms_number);

                    $status = 100;
                    $statusCode = 200;
                    $message = 1004;
                    $output = $mobile_exist[0];
                } else {
                    $status = 300;
                    $statusCode = 404;
                    $message = 1005;
                }
            }
        } else {
            $status = 300;
            $statusCode = 404;
            $message = 1006;
        }
        $response = array('status'=>$status, 'message'=>$message);
        
        return response()->json($response);
    }


    /**
     * Resend OTP.
     *
     * @param Json ApiRequest $request
     *
     * @return \Illuminate\Http\JsonResponse
     * @throws GeneralException
     */
    public function resend_otp(Request $request)
    {
        $response = array();
        $output = array();
        
        $json = file_get_contents('php://input');
        $obj = json_decode($json, TRUE);
        $mobile_number = (isset($obj['mobile_number']) ? $obj['mobile_number'] : '');

        if($mobile_number) {
            $id_exist = $this->userRepository->findByCondition(array('mobile_number'=>$mobile_number));
            if(count($id_exist)>0) {
                $mobile_verification_code = mt_rand(1000,9999);
                $instArr = array(
                                'mobile_verification_code'=>$mobile_verification_code
                                );
                $userupdate = $this->userRepository->updateByCondition(array('mobile_number'=>$mobile_number), $instArr);
                if($userupdate) {
                    $user = $this->userRepository->findByCondition(array('mobile_number'=>$mobile_number));
                    $to = $id_exist[0]->email;
                    $email_text='   <tr>
                                       <td style="padding: 20px 10px; font-family: sans-serif; font-size: 15px; mso-height-rule: exactly; line-height: 20px;color: #333; ">
                                           <p>Dear <span style="">User</span> </p>
                                        </td>
                                    </tr>
                                    <tr>
                                        <td style="font-family: sans-serif; color: #333; padding: 0px 10px 40px; font-size: 16px; line-height: 30px;">
                                           <p>Merci d\'avoir rejoint la communauté DANT</p>
                                           <!--<p style="font-weight:bold;">Your email and mobile verification code as follows:</p>-->
                                           <!--<p>Mobile Verification Code: '.$mobile_verification_code.'</p>-->
                                        </td>
                                    </tr>
                                    <tr>
                                        <td style="font-family: sans-serif; color: #333; padding: 0px 10px 40px; font-size: 16px; line-height: 30px;">Veuillez entrer le code de vérification reçu par SMS pour valider votre compte';
                    $email_text.='      </td>
                                    </tr>
                                    <tr>
                                        <td style="font-family: sans-serif; color: #333; padding: 0px 10px 40px; font-size: 16px; line-height: 30px;">
                                           <p>Restez connectés! Nous apprécions beaucoup la confiance que vous nous accordez</p>
                                           <p>N\'hésitez pas à nous contacter pour toute information.</p>
                                        </td>
                                    </tr>';
                            //echo $to; die;
                    $data['email_text'] = $email_text;    
                    Mail::send('mail.email_template', $data, function($message) use ($to)
                    {
                        $message->from(get_from_email(), 'DANT');
                        $message->to($to);
                        $message->subject('Mail d\'inscription');
                    });

                    $sms_text = 'Code de vérification de mobile: '.$mobile_verification_code;
                    $sms_number = $user[0]->mobile_country_code.$user[0]->mobile_number;
                    $this->sendSMS($sms_text, $sms_number);
                    /*************email********************/

                    /****************admin email******************/
                    $to = get_admin_email();
                    $email_text='   <tr>
                                        <td style="font-family: sans-serif; color: #333; padding: 0px 10px 40px; font-size: 16px; line-height: 30px;">
                                           <p>Code de vérification de mobile: '.$mobile_verification_code.'</p>
                                        </td>
                                    </tr>';
                            //echo $to; die;
                    $data['email_text'] = $email_text;    
                    Mail::send('mail.email_template', $data, function($message) use ($to)
                    {
                        $message->from(get_from_email(), 'DANT');
                        $message->to($to);
                        $message->subject('Mail d\'inscription');
                    });
                    /****************admin email******************/

                    $status = 100;
                    $statusCode = 200;
                    $message = 1007;
                    $output = $user;
                } else {
                    $status = 300;
                    $statusCode = 401;
                    $message = 1008;
                }
            } else {
                    $status = 300;
                    $statusCode = 404;
                    $message = 1009;
            }
        } else {
            $status = 300;
            $statusCode = 404;
            $message = 1009;
        }
        $response = array('status'=>$status, 'message'=>$message, 'result'=>$output);
        
        return response()->json($response);
    }


    /**
     * Mobile number OTP verification.
     *
     * @param Json ApiRequest $request
     *
     * @return \Illuminate\Http\JsonResponse
     * @throws GeneralException
     */
    public function mobile_otp_verification(Request $request)
    {
        $response = array();
        $output = array();
        $json = file_get_contents('php://input');
        $obj = json_decode($json, TRUE);
        //print_r($obj);die();
        $otp = $obj['otp'];
        $mobile_number = (isset($obj['mobile_number']) ? $obj['mobile_number'] : '');

        if($otp && $mobile_number) {
            $user_authorize = $this->userRepository->findByCondition(array('mobile_number'=>$mobile_number));
            //print_r($authorization);die;
            if(count($user_authorize) > 0) {
                $user = $this->userRepository->findByCondition(array('mobile_verification_code'=>$otp,'mobile_number'=>$mobile_number));
        
                if(count($user) > 0) {
                    $update_arr = [
                        'mobile_verification_code'   => 0,
                        'confirmed' => 1
                    ];
                    $user = $this->userRepository->updateByCondition(array('mobile_verification_code'=>$otp,'mobile_number'=>$mobile_number), $update_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);
    }


     /**
     * Forget password.
     *
     * @param Json ApiRequest $request
     *
     * @return \Illuminate\Http\JsonResponse
     * @throws GeneralException
     */
    public function forget_password(Request $request)
    {
        $response = array();
        $output = array();
        $json = file_get_contents('php://input');
        $obj = json_decode($json, TRUE);
        $email = $obj['email'];
        //print_r($jsonRequest);die();
        
        if($email) {
            $new_password = mt_rand(100000,999999);
            $update_arr = [
                'password'   => Hash::make($new_password)
            ];
            $user = $this->userRepository->updateByCondition(array('email'=>$email), $update_arr);
            if($user) {
                /*************email********************/
                $to = $email;
                $email_text='   <tr>
                                   <td style="padding: 20px 10px; font-family: sans-serif; font-size: 15px; mso-height-rule: exactly; line-height: 20px;color: #333; ">
                                       <p>Dear <span style="">User</span> </p>
                                    </td>
                                </tr>
                                <tr>
                                    <td style="font-family: sans-serif; color: #333; padding: 0px 10px 40px; font-size: 16px; line-height: 30px;">
                                       <p>Votre nouveau mot de passe : '.$new_password.'</p>
                                       <p>Veuillez vous connecter avec votre nouveau mot de passe et pensez à le personnaliser par la suite.</p>
                                    </td>
                                </tr>';
                $email_text.='  <tr>
                                    <td style="font-family: sans-serif; color: #333; padding: 0px 10px 40px; font-size: 16px; line-height: 30px;">
                                       <p>Restez connectés! Nous apprécions beaucoup la confiance que vous nous accordez</p>
                                       <p>N\'hésitez pas à nous contacter pour toute information.</p>
                                    </td>
                                </tr>';
                        //echo $to; die;
                $data['email_text'] = $email_text;    
                Mail::send('mail.email_template', $data, function($message) use ($to)
                {
                    $message->from(get_from_email(), 'DANT');
                    $message->to($to);
                    $message->subject('Forget password mail');
                });
                /*************email********************/
                $status = 100;
                $statusCode = 200;
                $message = 1013;
            } else {
                $status = 300;
                $statusCode = 402;
                $message = 1014;
            }
        } else {
            $status = 300;
            $statusCode = 404;
            $message = 1006;
        }
        $response = array('status'=>$status, 'message'=>$message, 'result'=>$output);
        
        return response()->json($response);
    }

     /**
     * The user has been authenticated.
     *
     * @param Json ApiRequest $request
     *
     * @return \Illuminate\Http\JsonResponse
     * @throws GeneralException
     */
    public function user_authentication(Request $request)
    {
        $response = array();
        $output = array();
        $otp_verified = 1;
        $json = file_get_contents('php://input');
        $obj = json_decode($json, TRUE);
        //print_r($obj);die();
        $email = $obj['email'];
        $password = $obj['password'];
        $device_token = (isset($obj['device_token']) ? $obj['device_token'] : '');
        if($email && $password) {
            $user = $this->userRepository->findByCondition(array('email'=>$email));
            //dd( $user);
            if(count($user)>0) {
                if(Hash::check($obj['password'], $user[0]->password)){
                    if($user[0]->status == 1) {

                        if($device_token){
                            $device_exist = $this->userDeviceTokenRepository->findByCondition(array('user_id'=>$user[0]->id));
                            if(count($device_exist)>0){
                                $userdevice = $this->userDeviceTokenRepository->updateByCondition(array('user_id'=>$user[0]->id), array('device_tokens'=>$device_token));
                            } else {
                                $devicetokenArr = array(
                                                'user_id'=>$user[0]->id,
                                                'device_token'=>$device_token
                                                );
                                $userdevice = $this->userDeviceTokenRepository->create($devicetokenArr);
                            }
                        }
                        $terms_checked = $this->userTermsLogRepository->where('user_id', $user[0]->id)->orderBy('id', 'DESC')->count();
                        $user[0]->first_name = (!$user[0]->first_name) ? "" : $user[0]->first_name;
                        $user[0]->last_name = (!$user[0]->last_name) ? "" : $user[0]->last_name;
                        $user[0]->dob = (!$user[0]->dob) ? "" : $user[0]->dob;
                        $user[0]->iban = (!$user[0]->iban) ? "" : $user[0]->iban;
                        $user[0]->credit_card_no = (!$user[0]->credit_card_no) ? "" : $user[0]->credit_card_no;
                        $user[0]->paypal_account = (!$user[0]->paypal_account) ? "" : $user[0]->paypal_account;
                        $user[0]->email_verified_at = (!$user[0]->email_verified_at) ? "" : $user[0]->email_verified_at;
                        $user[0]->terms_checked = $terms_checked;
                        if($user[0]->confirmed == 1) {
                            $status = 100;
                            $statusCode = 200;
                            $message = 1010;
                            $output = $user[0];
                        } else {
                            $mobile_verification_code = mt_rand(1000,9999);
                            $userUpdate = $this->userRepository->updateByCondition(array('id'=>$user[0]->id), array('mobile_verification_code'=>$mobile_verification_code));
                            $to = $email;
                            $email_text='   <tr>
                                               <td style="padding: 20px 10px; font-family: sans-serif; font-size: 15px; mso-height-rule: exactly; line-height: 20px;color: #333; ">
                                                   <p>Dear <span style="">User</span> </p>
                                                </td>
                                            </tr>
                                            <tr>
                                                <td style="font-family: sans-serif; color: #333; padding: 0px 10px 40px; font-size: 16px; line-height: 30px;">
                                                   <p style="font-weight:bold;">Your mobile verification code as follows:</p>
                                                   <p>Mobile Verification Code: '.$mobile_verification_code.'</p>
                                                </td>
                                            </tr>
                                            <tr>
                                                <td style="font-family: sans-serif; color: #333; padding: 0px 10px 40px; font-size: 16px; line-height: 30px;">Please put the verification code in the required fields in APP to confirm';
                            $email_text.='      </td>
                                            </tr>
                                            <tr>
                                                <td style="font-family: sans-serif; color: #333; padding: 0px 10px 40px; font-size: 16px; line-height: 30px;">
                                                   <p>Restez connectés! Nous apprécions beaucoup la confiance que vous nous accordez</p>
                                                   <p>N\'hésitez pas à nous contacter pour toute information.</p>
                                                </td>
                                            </tr>';
                                    //echo $to; die;
                            $data['email_text'] = $email_text;    
                            Mail::send('mail.email_template', $data, function($message) use ($to)
                            {
                                $message->from(get_from_email(), 'DANT');
                                $message->to($to);
                                $message->subject('OTP mail');
                            });

                            $sms_text = 'Code de vérification de mobile: '.$mobile_verification_code;
                            $sms_number = $user[0]->mobile_country_code.$user[0]->mobile_number;
                            $this->sendSMS($sms_text, $sms_number);

                            $otp_verified = 0;
                            $status = 300;
                            $statusCode = 403;
                            $output = $user[0];
                            $message = 1015;
                        }
                    } elseif($user[0]->status == 2)  {
                        $status = 300;
                        $statusCode = 402;
                        $message = 1116;
                    } else {
                        $status = 300;
                        $statusCode = 402;
                        $message = 1016;
                    }
                } else {
                    $status = 300;
                    $statusCode = 401;
                    $message = 1017;
                }
            } else {
                $status = 300;
                $statusCode = 401;
                $message = 1017;
            }
        } else {
            $status = 300;
            $statusCode = 404;
            $message = 1006;
        }
        $response = array('status'=>$status, 'message'=>$message, 'result'=>$output, 'otp_verified'=>$otp_verified);
        
        return response()->json($response);
    }

     /**
     * Send Test SMS.
     *
     * @param Json ApiRequest $request
     *
     * @return \Illuminate\Http\JsonResponse
     * @throws GeneralException
     */
    public function sendTestSMS() {
        $json = file_get_contents('php://input');
        $obj = json_decode($json, TRUE);
        //print_r($obj);die();
        $text = $obj['text'];
        $number = $obj['number'];

        $sms_gateway_email_details = $this->siteSettingsRepository->findByCondition(array('keyword'=>'sms_gateway_email'));
        $sms_gateway_email = '';
        if($sms_gateway_email_details->count()>0){
            $sms_gateway_email = $sms_gateway_email_details[0]->value;
        }
        $sms_gateway_api_key_details = $this->siteSettingsRepository->findByCondition(array('keyword'=>'sms_gateway_api_key'));
        $sms_gateway_api_key = '';
        if($sms_gateway_api_key_details->count()>0){
            $sms_gateway_api_key = $sms_gateway_api_key_details[0]->value;
        }
        try {
            
            $url = "https://www.octopush-dm.com/api/sms/?user_login=".$sms_gateway_email."&api_key=".$sms_gateway_api_key."&sms_text=".urlencode($text.'\n STOP au XXXXX')."&sms_recipients=+".$number."&sms_type=FR&sms_sender=Dant&sms_mode=11"; 
            $curl = curl_init($url);
            curl_setopt($curl, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);//raw output
            curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST');
            $result = curl_exec($curl);
            $message = simplexml_load_string($result);
            print_r($message);die;
            return true;
        } catch (\Exception $e) {
            return false;
        }
    }

     /**
     * Send SMS.
     *
     * @param Json ApiRequest $request
     *
     * @return \Illuminate\Http\JsonResponse
     * @throws GeneralException
     */
    public function sendSMS($text="", $number = 0) {
        $sms_gateway_email_details = $this->siteSettingsRepository->findByCondition(array('keyword'=>'sms_gateway_email'));
        $sms_gateway_email = '';
        if($sms_gateway_email_details->count()>0){
            $sms_gateway_email = $sms_gateway_email_details[0]->value;
        }
        $sms_gateway_api_key_details = $this->siteSettingsRepository->findByCondition(array('keyword'=>'sms_gateway_api_key'));
        $sms_gateway_api_key = '';
        if($sms_gateway_api_key_details->count()>0){
            $sms_gateway_api_key = $sms_gateway_api_key_details[0]->value;
        }
        try {
            
            $url = "https://www.octopush-dm.com/api/sms/?user_login=".$sms_gateway_email."&api_key=".$sms_gateway_api_key."&sms_text=".urlencode($text."\n STOP au XXXXX")."&sms_recipients=+".$number."&sms_type=FR&sms_sender=Dant&sms_mode=11"; 
            $curl = curl_init($url);
            curl_setopt($curl, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);//raw output
            curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST');
            $result = curl_exec($curl);
            $message = simplexml_load_string($result);
            //print_r($message);die;
            return true;
        } catch (\Exception $e) {
            return false;
        }
    }

    /**
     * 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);
    }

    /**
     * Get Circle Agreement.
     *
     * @param Json ApiRequest $request
     *
     * @return \Illuminate\Http\JsonResponse
     * @throws GeneralException
     */
    public function getAgreement(Request $request)
    {
        $response = array();
        $output = array();

        $agreement = $this->agreementRepository->findByCondition();
        if($agreement) {
            $status = 100;
            $statusCode = 200;
            $output = $agreement;
            $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'];
        $mobile_number = (isset($obj['mobile_number']) ? $obj['mobile_number'] : '');

        if($terms_id && $mobile_number) {
            $user_authorize = $this->userRepository->findByCondition(array('mobile_number'=>$mobile_number));
            //print_r($authorization);die;
            if(count($user_authorize) > 0) {
                $user = $this->userRepository->findByCondition(array('mobile_number'=>$mobile_number));        
                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);
    }
}
