<?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 App\Repositories\CircleRepository;
use App\Repositories\CircleUserRepository;
use App\Repositories\CircleRoundPaymentRepository;
use App\Repositories\CircleDepositPaymentRepository;
use App\Repositories\CircleRoundRepository;
use App\Repositories\Auth\UserDeviceTokenRepository;
use App\Repositories\SiteSettingsRepository;
use App\Repositories\CurrencyRepository;
use Illuminate\Support\Facades\Mail;
use Stripe\Stripe;

/**
 * Class CircleApiController.
 */
class UserCircleApiController extends Controller
{
    /**
     * @var UserRepository
     * @var CircleUserRepository
     * @var CircleRepository
     * @var CircleRoundPaymentRepository
     * @var CircleDepositPaymentRepository
     * @var CircleRoundRepository
     * @var UserDeviceTokenRepository
     * @var SiteSettingsRepository
     * @var CurrencyRepository
     */
    protected $userRepository;
    protected $circleUserRepository;
    protected $circleRepository;
    protected $circleRoundPaymentRepository;
    protected $circleRoundRepository;
    protected $userDeviceTokenRepository;
    protected $siteSettingsRoundRepository;
    protected $curencyRepository;

    /**
     * CircleApiController constructor.
     *
     * @param UserRepository $userRepository
     * @param CircleUserRepository $circleUserRepository
     * @param CircleRepository $circleRepository
     * @param CircleRoundPaymentRepository $circleRoundPaymentRepository
     * @param CircleDepositPaymentRepository $circleDepositPaymentRepository
     * @param CircleRoundRepository $circleRoundRepository
     * @param UserDeviceTokenRepository $userDeviceTokenRepository
     * @param SiteSettingsRepository $siteSettingsRepository
     * @param CurrencyRepository $curencyRepository
     */
    public function __construct(UserRepository $userRepository, CircleRepository $circleRepository, CircleUserRepository $circleUserRepository, CircleRoundPaymentRepository $circleRoundPaymentRepository, CircleRoundRepository $circleRoundRepository, CircleDepositPaymentRepository $circleDepositPaymentRepository, UserDeviceTokenRepository $userDeviceTokenRepository, SiteSettingsRepository $siteSettingsRepository, CurrencyRepository $curencyRepository)
    {
        $this->userRepository = $userRepository;
        $this->circleUserRepository = $circleUserRepository;
        $this->circleRepository = $circleRepository;
        $this->circleRoundPaymentRepository = $circleRoundPaymentRepository;
        $this->circleRoundRepository = $circleRoundRepository;
        $this->circleDepositPaymentRepository = $circleDepositPaymentRepository;
        $this->userDeviceTokenRepository = $userDeviceTokenRepository;
        $this->siteSettingsRepository = $siteSettingsRepository;
        $this->curencyRepository = $curencyRepository;

        $this->apikey = "sk_test_3PQ7vkESqL4CuxVXJEXPrKep";
    }


    /**
     * Circle list status wise.
     *
     * @param Json ApiRequest $request
     *
     * @return \Illuminate\Http\JsonResponse
     * @throws GeneralException
     */
    public function circleList(Request $request)
    {
        $response = array();
        $output = array();
        $json = file_get_contents('php://input');
        $obj = json_decode($json, TRUE);

        $circle_status = (isset($obj['circle_status']) ? $obj['circle_status'] : '');
        $authorization = explode('Bearer ', $request->header('Authorization'));
        $authorization = end($authorization);

        if($authorization){
            if($circle_status!='') {
                $user_authorize = $this->userRepository->findByCondition(array('remember_token'=>$authorization));
                //echo '<pre>'; print_r($user_authorize);die;
                if($user_authorize->count() > 0) {
                    $circles = $this->circleRepository->getAllCircles($user_authorize[0]->id,'',$user_authorize[0]->mobile_number,$circle_status);
                    //echo '<pre>'; print_r($circles);die;
                    if($circles->count()>0) {
                        foreach ($circles as $key => $value) {
                            $adminDetails = $this->userRepository->findByCondition(array('id'=>$value->user_id));
                            //echo '<pre>'; print_r($adminDetails);die;
                            if($adminDetails->count()>0){
                               $value->admin = $adminDetails[0]->first_name;
                                foreach ($value->getUsers as $val) {
                                    $val->username = str_replace('(Admin)', '', $val->username);
                                } 
                            }
                            //expected payment date calculation
                                $myDetails = $this->circleUserRepository->findByCondition(array('circle_code'=>$value->circle_code,'mobile_number'=>$user_authorize[0]->mobile_number));
                                //dd($myDetails);
                                $total_amount_get = 0;
                                $achieve = 0;
                                $myPosition = 0;
                                if($myDetails->count()>0){
                                    $myPosition = $myDetails[0]->preference+1;
                                }
                                $value->expected_payable_date = '';
                                for($i=1;$i<=$value->estimate_round;$i++){
                                    $total_amount_get += $value->round_set*$value->no_of_member;
                                    if($total_amount_get >= $value->target_achive){
                                        $achieve += 1;
                                        //echo $total_amount_get.'|'.$achieve.'='.$myPosition.'==';
                                        if($achieve == $myPosition){
                                            $myPayableRoundDetails = $this->circleRoundRepository->findByCondition(array('circle_code'=>$value->circle_code, 'round_no'=>$i));
                                            if($myPayableRoundDetails->count()>0){
                                                $value->expected_payable_date = date('d.m.Y',strtotime($myPayableRoundDetails[0]->payments_grace_date));
                                            }
                                        }
                                        $total_amount_get = ($total_amount_get - $value->target_achive);
                                    }
                                }
                            //expected payment date calculation

                            //expected next round payment date calculation
                            $value->expected_next_payment_date = '';    
                            $currentRound = $value->completed_round+1;
                            $currentRoundDetails = $this->circleRoundRepository->findByCondition(array('circle_code'=>$value->circle_code, 'round_no'=>$currentRound));
                            //dd($currentRoundDetails);
                            if($currentRoundDetails->count()>0){
                                $currentRoundPaymentDetails = $this->circleRoundPaymentRepository->findByCondition(array('circle_code'=>$value->circle_code, 'round_id'=>$currentRoundDetails[0]->id, 'circle_user_id'=>$myDetails[0]->id));
                                $value->expected_next_payment_date = date('d.m.Y',strtotime($currentRoundDetails[0]->payments_date));
                                if($currentRoundPaymentDetails->count()>0){
                                if($currentRoundPaymentDetails[0]->trn_status==1){
                                        $nextRoundDetails = $this->circleRoundRepository->findByCondition(array('circle_code'=>$value->circle_code, 'round_no'=>$currentRound+1));
                                        if($nextRoundDetails->count()>0){
                                            $value->expected_next_payment_date = date('d.m.Y',strtotime($nextRoundDetails[0]->payments_date));
                                        }
                                    }
                                }
                            }
                            
                            
                            //expected next round payment date calculation   
                        }

                        $status = 100;
                        $statusCode = 200;
                        $message = 'Circle found';
                        $output = $circles;
                    } else {
                        $status = 300;
                        $statusCode = 401;
                        $message = "No Circle found";
                    }
                } else {
                    $status = 300;
                    $statusCode = 401;
                    $message = "Unauthenticated user";
                }
            } else {
                $status = 300;
                $statusCode = 404;
                $message = "Please send circle status";
            }
        } else {
            $status = 300;
            $statusCode = 404;
            $message = "Authorization required";
        }
        
        $response = array('status'=>$status, 'message'=>$message, 'result'=>$output);
        
        return response()->json($response);
    }

    /**
     * Circle user join or reject.
     *
     * @param Json ApiRequest $request
     *
     * @return \Illuminate\Http\JsonResponse
     * @throws GeneralException
     */
    public function circleUserStatus(Request $request)
    {
        $response = array();
        $output = array();
        $json = file_get_contents('php://input');
        $obj = json_decode($json, TRUE);

        $circle_code = (isset($obj['circle_code']) ? $obj['circle_code'] : '');
        $mobile_number = (isset($obj['mobile_number']) ? $obj['mobile_number'] : '');
        $join_status = (isset($obj['join_status']) ? $obj['join_status'] : '');
        $reason_id = (isset($obj['reason_id']) ? $obj['reason_id'] : '');
        $other_reason = (isset($obj['other_reason']) ? $obj['other_reason'] : '');
        $authorization = explode('Bearer ', $request->header('Authorization'));
        $authorization = end($authorization);

        if($authorization){
            if($circle_code!='' && $mobile_number!='') {
                $user_authorize = $this->userRepository->findByCondition(array('remember_token'=>$authorization));
                //print_r($authorization);die;
                if(count($user_authorize) > 0) {
                    $update = $this->circleUserRepository->updateByCondition(array('circle_code'=>$circle_code,'mobile_number'=>$mobile_number),array('accept_status'=>$join_status,'reason_id'=>$reason_id,'other_reason'=>$other_reason,'status_date'=>date('Y-m-d')));
                    $update = $this->circleRepository->updateByCondition(array('circle_code'=>$circle_code),array('status'=>0));
                    $circles = $this->circleUserRepository->findByCondition(array('circle_code'=>$circle_code));
                    if($circles){
                        foreach ($circles as $key => $value) {
                            if($user_authorize[0]->mobile_number != $value->mobile_number){
                                $userDetails = $this->userRepository->findByCondition(array('mobile_number'=>$value->mobile_number));
                                if($userDetails->count()>0){
                                    /*************email********************/
                                    //$to = 'sayan@digitalaptech.com';
                                    $to = $userDetails[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="">'.$userDetails[0]->first_name.'</span> </p>
                                                        </td>
                                                    </tr>
                                                    <tr>
                                                        <td style="font-family: sans-serif; color: #333; padding: 0px 10px 40px; font-size: 16px; line-height: 30px;">
                                                           <p>Your one of the circle is suspending, due to someone rejected to join.</p>
                                                           <p>Please find the following circle details:</p>
                                                           
                                                           <p>Circle Code: '.$value->circle_code.'</p>
                                                        </td>
                                                    </tr>
                                                    <tr>
                                                        <td style="font-family: sans-serif; color: #333; padding: 0px 10px 40px; font-size: 16px; line-height: 30px;">
                                                           <p>Stay connected with us. We appreciate very much your trust in us.</p>
                                                           <p>Please do not hesitate to contact us for any other requests.</p>
                                                        </td>
                                                    </tr>';
                                            //echo $email_text; die;
                                    $data['email_text'] = $email_text;    
                                    Mail::send('mail.email_template', $data, function($message) use ($to)
                                    {
                                        $message->from('testdevloper007@gmail.com', 'DART APP');
                                        $message->to($to);
                                        $message->subject('Circle joining reject mail');
                                    });
                                    /*************email********************/

                                    /****************notification**********************/
                                    $userDevice = $this->userDeviceTokenRepository->findByCondition(array('user_id'=>$userDetails[0]->id));
                                    $content = array(
                                        "en" => 'DART '.$user_authorize[0]->first_name.' rejected to join on Circle Code:'.$circle_code
                                    );
                                    $notify_response = $this->siteSettingsRepository->notification($userDevice[0]->device_tokens, $circle_code, $content);
                                    /****************notification**********************/
                                }
                            }
                        }
                    }
                    $status = 100;
                    $statusCode = 200;
                    $message = 'Request rejected successfully';
                } else {
                    $status = 300;
                    $statusCode = 401;
                    $message = "Unauthenticated user";
                }
            } else {
                $status = 300;
                $statusCode = 404;
                $message = "Please send circle code and mobile";
            }
        } else {
            $status = 300;
            $statusCode = 404;
            $message = "Authorization required";
        }
        
        $response = array('status'=>$status, 'message'=>$message, 'result'=>$output);
        
        return response()->json($response);
    }


    /**
     * On Going Circle Details.
     *
     * @param Json ApiRequest $request
     *
     * @return \Illuminate\Http\JsonResponse
     * @throws GeneralException
     */
    public function onGoingCircleDetails(Request $request)
    {
        $response = array();
        $output = array();
        $circleCurrentRoundPaymentDetails = array();
        $json = file_get_contents('php://input');
        $obj = json_decode($json, TRUE);

        $circle_code = (isset($obj['circle_code']) ? $obj['circle_code'] : '');
        $authorization = explode('Bearer ', $request->header('Authorization'));
        $authorization = end($authorization);

        if($authorization){
            if($circle_code!='') {
                $user_authorize = $this->userRepository->findByCondition(array('remember_token'=>$authorization));
                
                if(count($user_authorize) > 0) {
                    $circleDetails = $this->circleRepository->findByCondition(array('circle_code'=>$circle_code));
                    if(count($circleDetails)>0){
                        $status = 100;
                        $statusCode = 200;
                        $message = 'Cicle details';
                        $output = $circleDetails[0];
                        $output['current_round'] = (($circleDetails[0]->estimate_round - $circleDetails[0]->completed_round)>0) ? ($circleDetails[0]->completed_round + 1) : $circleDetails[0]->estimate_round;

                        $circleCurrentRoundDetails = $this->circleRoundRepository->findByCondition(array('circle_code'=>$circle_code, 'round_no'=>$output['current_round']));
                        if(count($circleCurrentRoundDetails)>0){
                            if($circleCurrentRoundDetails[0]->round_no>0){
                                $output['previous_round_payment_date'] = '';
                                $circlePrevRoundDetails = $this->circleRoundRepository->findByCondition(array('circle_code'=>$circle_code, 'round_no'=>$output['current_round']-1));
                                if(count($circlePrevRoundDetails)>0){
                                    $output['previous_round_payment_date'] = date('d/m/Y',strtotime($circlePrevRoundDetails[0]->payments_date));
                                }
                            }
                            $output['expected_next_payment_date'] = date('d.m.Y',strtotime($circleCurrentRoundDetails[0]->payments_date));

                            $circleCurrentRoundPaymentDetails = $this->circleRoundPaymentRepository->getOnGoingCircleUsers($circle_code,$circleCurrentRoundDetails[0]->id);
                            
                            //echo '<pre>';print_r($circleCurrentRoundPaymentDetails);die;
                            $round_complete = [];
                            for($i = 1; $i<=$circleDetails[0]->completed_round; $i++){
                                $round_complete[$i-1]['round'] = $i;
                                $payment_withdraw = $this->circleRoundPaymentRepository->getRoundWithdraw($circle_code,$i);
                                $round_complete[$i-1]['reciever_msg'] = "";
                                if($payment_withdraw){
                                    //dd($payment_withdraw);
                                    $round_complete[$i-1]['reciever_msg'] = "The reciever of this round was ".$payment_withdraw->username." on ".date('d.m.Y',strtotime($payment_withdraw->created_at));
                                }
                                $completedRoundDetails = $this->circleRoundRepository->findByCondition(array('circle_code'=>$circle_code, 'round_no'=>$i));
                                if($completedRoundDetails){
                                    $round_complete[$i-1]['completion_date'] = date('d/m/Y',strtotime($completedRoundDetails[0]->payments_date));
                                }
                            }
                            $output['round_complete'] = $round_complete; 
                            $output['request_accept_status'] = 0; 
                            $output['is_admin'] = 0; 
                            $output['login_user_current_round_payment_status'] = 0; 
                            $output['current_round_payment_date'] = date('d/m/Y',strtotime($circleCurrentRoundDetails[0]->payments_date));
                            
                            /*****************current round recieve*************************/
                            $target_amount1 = $circleDetails[0]->target_achive;
                            $round_amount1  = $circleDetails[0]->round_set;
                            $member_count1  = $circleDetails[0]->no_of_member;
                            $round_number1  = $output['current_round'];
                            $total_amount1  = $member_count1*$round_amount1*$round_number1; 
                            $countwithdraw = $this->circleRoundPaymentRepository->findByCondition(array('circle_code'=>$circle_code, 'payment_type'=>2));
                            $output['userWillRecieveCurrentRound'] = ""; 
                            if(($total_amount1-($countwithdraw->count()*$target_amount1))>=$target_amount1)
                            {
                                $userRecieve = $this->circleUserRepository->findUserGetWithdrawal(array('circle_code'=>$circle_code),$countwithdraw->count());
                                if((($circleDetails[0]->estimate_round - $circleDetails[0]->completed_round)>0)){
                                    $output['userWillRecieveCurrentRound'] = "The reciever of this round is ".$userRecieve->username." and expected on ".date('d.m.Y',strtotime($circleCurrentRoundDetails[0]->payments_grace_date));
                                }
                            }
                            /*****************current round recieve*************************/
                            $circles = $this->circleUserRepository->findByCondition(array('circle_code'=>$circle_code));
                            $circlesAdmin = $this->userRepository->findByCondition(array('id'=>$circleDetails[0]->user_id));
                            //dd($circlesAdmin);
                            if($circlesAdmin[0]->mobile_number==$user_authorize[0]->mobile_number){
                                $output['is_admin'] = 1; 
                            }
                            $output['admin_mobile'] = $circlesAdmin[0]->mobile_country_code.$circlesAdmin[0]->mobile_number; 
                            $output['admin'] = $circlesAdmin[0]->first_name; 
                            $output['login_user_mobile'] = $user_authorize[0]->mobile_country_code.$user_authorize[0]->mobile_number;

                            //expected payment date calculation
                            $myDetails = $this->circleUserRepository->findByCondition(array('circle_code'=>$circle_code, 'mobile_number'=>$user_authorize[0]->mobile_number));
                            //dd($myDetails);
                            $total_amount_get = 0;
                            $achieve = 0;
                            $myPosition = 0;
                            if($myDetails->count()>0){
                                $myPosition = $myDetails[0]->preference+1;
                            }

                            for($i=1;$i<=$circleDetails[0]->estimate_round;$i++){
                                $total_amount_get += $circleDetails[0]->round_set*$circleDetails[0]->no_of_member;
                                if($total_amount_get >= $circleDetails[0]->target_achive){
                                    $achieve += 1;
                                    //echo $total_amount_get.'|'.$achieve.'='.$myPosition.'==';
                                    if($achieve == $myPosition){
                                        $myPayableRoundDetails = $this->circleRoundRepository->findByCondition(array('circle_code'=>$circle_code, 'round_no'=>$i));
                                        if($myPayableRoundDetails->count()>0){
                                            $output['expected_payable_date'] = date('d.m.Y',strtotime($myPayableRoundDetails[0]->payments_grace_date));
                                        }
                                    }
                                    $total_amount_get = ($total_amount_get - $circleDetails[0]->target_achive);
                                }
                            }
                            //expected payment date calculation
                            $output['refund_amount'] = 0;
                            $output['receive_amount'] = 0;
                            $output['termination_request_sent'] = 0; 
                            $output['circleDepositdPaymentStatus'] = 0;
                            if($circles){
                                foreach ($circles as $key => $value) {
                                    $value->username = str_replace('(Admin)', '', $value->username);
                                    $circleCurrentRoundPaymentDetails = $this->circleRoundPaymentRepository->findByCondition(array('circle_code'=>$circle_code, 'round_id'=>$circleCurrentRoundDetails[0]->id,'circle_user_id'=>$value->id,'payment_type'=>1));
                                    
                                    $value->current_round_payment_status = 0;
                                    if($circleCurrentRoundPaymentDetails->count()>0){
                                        $value->current_round_payment_status = $circleCurrentRoundPaymentDetails[0]['trn_status'];
                                    }
                                    if($value->mobile_number==$user_authorize[0]->mobile_number){
                                        $output['request_accept_status'] = $value->accept_status; 
                                        
                                        if($circleCurrentRoundPaymentDetails->count()>0){
                                            $output['login_user_current_round_payment_status'] = $circleCurrentRoundPaymentDetails[0]['trn_status'];
                                            if(count($round_complete)>0){
                                                $nextRoundDetails = $this->circleRoundRepository->findByCondition(array('circle_code'=>$circle_code, 'round_no'=>$round_complete[0]['round']+1));
                                                if($nextRoundDetails->count()>0){
                                                    $output['expected_next_payment_date'] = date('d.m.Y',strtotime($nextRoundDetails[0]->payments_date));
                                                }
                                            }
                                        }
                                        $output['termination_request_sent'] = $value->termination_request_status; 

                                        $circleDepositdPaymentDetails = $this->circleDepositPaymentRepository->findByCondition(array('circle_code'=>$circle_code,'circle_user_id'=>$value->id));
                                        if($circleDepositdPaymentDetails->count()>0){
                                            $output['circleDepositdPaymentStatus'] = 1;
                                        }
                                    }
                                    
                                    $circle_user_details = $this->userRepository->findByCondition(array('mobile_number'=>$value->mobile_number));
                                    $value->user_email = '';
                                    $value->deviceToken = '';
                                    if($circle_user_details->count()>0){
                                        $value->user_email = $circle_user_details[0]->email;
                                        /*********************device token************************/
                                        $devicetokenExist = $this->userDeviceTokenRepository->findByCondition(array('user_id'=>$circle_user_details[0]->id));
                                        if($devicetokenExist->count()>0){
                                            $value->deviceToken = $devicetokenExist[0]->device_tokens;
                                        }
                                        /*********************device token************************/
                                    }
                                     
                                    /********************************Report for Suspend screen*********************************/
                                    if($circleDetails[0]->status==3){
                                        $total_paid = 0;
                                        $totalPaymentDetails = $this->circleRoundPaymentRepository->findByCondition(array('circle_code'=>$circle_code, 'circle_user_id'=>$value->id,'payment_type'=>1,'trn_status'=>1));
                                        foreach ($totalPaymentDetails as $kPaymentDetails => $vPaymentDetails) {
                                            $total_paid = $total_paid + $vPaymentDetails->amount;
                                        }
                                        $value->totalPaymentDetails = $total_paid;
                                        $withdrawDetails = $this->circleRoundPaymentRepository->findByCondition(array('circle_code'=>$circle_code, 'circle_user_id'=>$value->id,'payment_type'=>2,'trn_status'=>1));
                                        $value->withdrawDetails = 0;
                                        if($withdrawDetails->count()>0){
                                            $value->withdrawDetails = $withdrawDetails[0]->amount;
                                        }
                                        $value->balance = 0;
                                        $value->balance = ($value->totalPaymentDetails - $value->withdrawDetails);
                                        if($value->mobile_number==$user_authorize[0]->mobile_number){
                                            if($value->withdrawDetails > 0){
                                                $output['refund_amount'] = abs($value->balance); 
                                            } else {
                                                $output['receive_amount'] = abs($value->balance);  
                                            }
                                            
                                        }
                                        
                                    }
                                    /********************************Report for Suspend screen*********************************/

                                }
                            }
                            $output['circleUsers'] = $circles;
                        } else {
                            $status = 300;
                            $statusCode = 401;
                            $message = "No round found";
                        }
                    }  else {
                        $status = 300;
                        $statusCode = 401;
                        $message = "No circle found";
                    }
                } else {
                    $status = 300;
                    $statusCode = 401;
                    $message = "Unauthenticated user";
                }
            } else {
                $status = 300;
                $statusCode = 404;
                $message = "Please send circle code";
            }
        } else {
            $status = 300;
            $statusCode = 404;
            $message = "Authorization required";
        }
        
        $response = array('status'=>$status, 'message'=>$message, 'result'=>$output);
        
        return response()->json($response);
    }


    /**
     * Circle payment.
     *
     * @param Json ApiRequest $request
     *
     * @return \Illuminate\Http\JsonResponse
     * @throws GeneralException
     */
    public function circlePayment(Request $request)
    {
        $response = array();
        $output = array();
        $circleUserDetails = array();
        $json = file_get_contents('php://input');
        $obj = json_decode($json, TRUE);
        
        $circle_code = (isset($obj['circle_code']) ? $obj['circle_code'] : '');
        $round_no = (isset($obj['round_no']) ? $obj['round_no'] : '');
        $trn_id = (isset($obj['trn_id']) ? $obj['trn_id'] : '');
        $trn_status = (isset($obj['trn_status']) ? $obj['trn_status'] : '');
        $amount = (isset($obj['amount']) ? $obj['amount'] : '');
        $payment_mode = (isset($obj['payment_mode']) ? $obj['payment_mode'] : '');
        $payment_date = date('Y-m-d',strtotime(str_replace('/', '-', $obj['payment_date'])));
        $stripeToken = (isset($obj['stripeToken']) ? $obj['stripeToken'] : '');
        $authorization = explode('Bearer ', $request->header('Authorization'));
        $authorization = end($authorization);

        if($authorization){
            if($circle_code!='' && $round_no!='' && $trn_status!='' && $amount!='' && $payment_mode!='') {
                $user_authorize = $this->userRepository->findByCondition(array('remember_token'=>$authorization));
                if(count($user_authorize) > 0) {
                    $circleRoundDetails = $this->circleRoundRepository->findByCondition(array('circle_code'=>$circle_code, 'round_no'=>$round_no));
                    if(count($circleRoundDetails)>0){
                        if(strtotime($circleRoundDetails[0]->payments_grace_date) >= strtotime($payment_date)){
                            $circleUserDetails = $this->circleUserRepository->findByCondition(array('circle_code'=>$circle_code, 'mobile_number'=>$user_authorize[0]->mobile_number));
                            if(count($circleUserDetails)==0){
                                $circleUserDetails = $this->circleUserRepository->findByCondition(array('circle_code'=>$circle_code, 'user_id'=>$user_authorize[0]->id, 'mobile_number'=>$user_authorize[0]->mobile_number));
                            }
                            if(count($circleUserDetails)>0){
                                $inst_arr = [
                                    'circle_code'   => $circle_code,
                                    'circle_user_id'   => $circleUserDetails[0]->id,
                                    'round_id'   => $circleRoundDetails[0]->id,
                                    'trn_id'   => $trn_id,
                                    'trn_status'   => $trn_status,
                                    'amount'   => $amount,
                                    'payment_mode' => $payment_mode
                                ];
                                $create = $this->circleRoundPaymentRepository->create($inst_arr);
                                if($create){
                                    $payment_result = "";
                                    if($payment_mode==2){
                                        $payment_result = $this->stripe_payment($stripeToken, $amount);
                                        if($payment_result != 'declined'){ 
                                            $this->circleRoundPaymentRepository->updateByCondition(array('id'=>$create->id), array('trn_id'=>$payment_result,'trn_status'=>1)); 
                                            $paidUsers = $this->circleRoundPaymentRepository->findByCondition(array('circle_code'=>$circle_code, 'round_id'=>$circleRoundDetails[0]->id, 'trn_status'=>1,'payment_type'=>1));
                                            $circleData = $this->circleRepository->findByCondition(array('circle_code'=>$circle_code));
                                            if($paidUsers->count()==$circleData[0]->no_of_member){
                                                $this->circleRepository->updateByCondition(array('circle_code'=>$circle_code), array('completed_round'=>$circleRoundDetails[0]->round_no,'status'=>1));
                                                $this->circleRoundRepository->updateByCondition(array('id'=>$circleRoundDetails[0]->id), array('payment_status'=>1));
                                            }
                                        }
                                    }
                                    /*************email********************/
                                    if($payment_result != 'declined'){
                                        //$to = 'sayan@digitalaptech.com';
                                        $to = $user_authorize[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_authorize[0]->first_name.'</span> </p>
                                                            </td>
                                                        </tr>
                                                        <tr>
                                                            <td style="font-family: sans-serif; color: #333; padding: 0px 10px 40px; font-size: 16px; line-height: 30px;">
                                                               <p>Your payment for the circle is done, please wait for admin approval.</p>
                                                               <p>Please find the follwing payment details:</p>
                                                               
                                                               <p>Circle Code: '.$circle_code.'</p>
                                                               <p>Amount: '.$amount.'</p>
                                                            </td>
                                                        </tr>
                                                        <tr>
                                                            <td style="font-family: sans-serif; color: #333; padding: 0px 10px 40px; font-size: 16px; line-height: 30px;">
                                                               <p>Stay connected with us. We appreciate very much your trust in us.</p>
                                                               <p>Please do not hesitate to contact us for any other requests.</p>
                                                            </td>
                                                        </tr>';
                                                //echo $email_text; die;
                                        $data['email_text'] = $email_text;    
                                        Mail::send('mail.email_template', $data, function($message) use ($to)
                                        {
                                            $message->from('testdevloper007@gmail.com', 'DART APP');
                                            $message->to($to);
                                            $message->subject('Circle payment mail');
                                        });
                                        /*************email********************/
                                        $status = 100;
                                        $statusCode = 200;
                                        $message = 'Payment done successfully';
                                        if($payment_mode==1){
                                            $message = 'Payment done successfully, wait for admin approval';
                                        }
                                    } else {
                                        $status = 300;
                                        $statusCode = 401;
                                        $message = "Transaction is declined, please another time";
                                    }
                                } else {
                                    $status = 300;
                                    $statusCode = 401;
                                    $message = "Some error occured";
                                }
                            } else {
                                $status = 300;
                                $statusCode = 401;
                                $message = "No user found";
                            } 
                        } else {
                            $status = 300;
                            $statusCode = 401;
                            $message = "Payment date exceeded";
                        } 
                        
                    } else {
                        $status = 300;
                        $statusCode = 401;
                        $message = "No round found";
                    } 
                    
                } else {
                    $status = 300;
                    $statusCode = 401;
                    $message = "Unauthenticated user";
                }
            } else {
                $status = 300;
                $statusCode = 404;
                $message = "Please send all required parameters";
            }
        } else {
            $status = 300;
            $statusCode = 404;
            $message = "Authorization required";
        }
        
        $response = array('status'=>$status, 'message'=>$message, 'result'=>$output);
        
        return response()->json($response);
    }


    /**
     * Circle request accept.
     *
     * @param Json ApiRequest $request
     *
     * @return \Illuminate\Http\JsonResponse
     * @throws GeneralException
     */
    public function circleRequestAccept(Request $request)
    {
        $response = array();
        $output = array();
        $circleUserDetails = array();
        $json = file_get_contents('php://input');
        $obj = json_decode($json, TRUE);
        
        $login_mobile_number = (isset($obj['login_mobile_number']) ? $obj['login_mobile_number'] : '');
        $circle_user_id = (isset($obj['circle_user_id']) ? $obj['circle_user_id'] : '');
        $join_status = (isset($obj['join_status']) ? $obj['join_status'] : '');
        $reason_id = (($obj['reason_id']!='') ? $obj['reason_id'] : '0');
        $other_reason = (isset($obj['other_reason']) ? $obj['other_reason'] : '');
        $circle_code = (isset($obj['circle_code']) ? $obj['circle_code'] : '');
        $trn_id = (isset($obj['trn_id']) ? $obj['trn_id'] : '');
        $trn_status = (isset($obj['trn_status']) ? $obj['trn_status'] : '');
        $amount = (isset($obj['amount']) ? $obj['amount'] : '');
        $payment_date = date('Y-m-d',strtotime(str_replace('/', '-', $obj['payment_date'])));
        $payment_mode = (isset($obj['payment_mode']) ? $obj['payment_mode'] : '');
        $stripeToken = (isset($obj['stripeToken']) ? $obj['stripeToken'] : '');
        $authorization = explode('Bearer ', $request->header('Authorization'));
        $authorization = end($authorization);

        if($authorization){
            if($login_mobile_number!='' && $join_status!='' && $reason_id!='' && $circle_code!='' && $trn_status!='' && $amount!='' && $payment_mode!='') {
                $user_authorize = $this->userRepository->findByCondition(array('remember_token'=>$authorization));
                if(count($user_authorize) > 0) {
                    $circleUserDetails = $this->circleUserRepository->findByCondition(array('circle_code'=>$circle_code, 'mobile_number'=>$user_authorize[0]->mobile_number));
                    if(count($circleUserDetails)==0){
                        $circleUserDetails = $this->circleUserRepository->findByCondition(array('circle_code'=>$circle_code, 'user_id'=>$user_authorize[0]->id, 'mobile_number'=>$user_authorize[0]->mobile_number));
                    }
                    if(count($circleUserDetails)>0){
                        $inst_arr = [
                            'circle_code'   => $circle_code,
                            'circle_user_id'   => $circleUserDetails[0]->id,
                            'round_id'   => 0,
                            'trn_id'   => $trn_id,
                            'trn_status'   => $trn_status,
                            'amount'   => $amount,
                            'payment_mode' => $payment_mode
                        ];
                        $create = $this->circleDepositPaymentRepository->create($inst_arr);
                        if($create){
                            $update = $this->circleUserRepository->updateByCondition(array('circle_code'=>$circle_code,'mobile_number'=>$login_mobile_number),array('accept_status'=>$join_status,'reason_id'=>$reason_id,'other_reason'=>$other_reason,'status_date'=>date('Y-m-d')));
                            $payment_result = "";
                            if($payment_mode==2) { 
                                $payment_result = $this->stripe_payment($stripeToken, $amount);
                                if($payment_result != 'declined'){ 
                                    $this->circleDepositPaymentRepository->updateByCondition(array('id'=>$create->id), array('trn_id'=>$payment_result,'trn_status'=>1));         
                                    $paidUsers = $this->circleDepositPaymentRepository->findByCondition(array('circle_code'=>$circle_code, 'round_id'=>0, 'trn_status'=>1,'payment_type'=>1));
                                    //echo count($paidUsers).'=='.$circle[0]->no_of_member;die;
                                    $circleData = $this->circleRepository->findByCondition(array('circle_code'=>$circle_code));
                                    if($paidUsers->count()==$circleData[0]->no_of_member){
                                        $this->circleRepository->updateByCondition(array('circle_code'=>$circle_code), array('status'=>1));
                                    }
                                }
                            }
                            if($payment_result != 'declined'){
                                /*************email********************/
                                //$to = 'sayan@digitalaptech.com';
                                $to = $user_authorize[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_authorize[0]->first_name.'</span> </p>
                                                    </td>
                                                </tr>
                                                <tr>
                                                    <td style="font-family: sans-serif; color: #333; padding: 0px 10px 40px; font-size: 16px; line-height: 30px;">
                                                       <p>Your payment for the circle is done, please wait for admin approval.</p>
                                                       <p>Please find the follwing payment details:</p>
                                                       
                                                       <p>Circle Code: '.$circle_code.'</p>
                                                       <p>Amount: '.$amount.'</p>
                                                    </td>
                                                </tr>
                                                <tr>
                                                    <td style="font-family: sans-serif; color: #333; padding: 0px 10px 40px; font-size: 16px; line-height: 30px;">
                                                       <p>Stay connected with us. We appreciate very much your trust in us.</p>
                                                       <p>Please do not hesitate to contact us for any other requests.</p>
                                                    </td>
                                                </tr>';
                                        //echo $email_text; die;
                                $data['email_text'] = $email_text;    
                                Mail::send('mail.email_template', $data, function($message) use ($to)
                                {
                                    $message->from('testdevloper007@gmail.com', 'DART APP');
                                    $message->to($to);
                                    $message->subject('Circle payment mail');
                                });
                                /*************email********************/
                                $status = 100;
                                $statusCode = 200;
                                $message = 'Deposit Payment done successfully';
                                if($payment_mode==1){
                                    $message = 'Deposit Payment done successfully, wait for admin approval';
                                }
                            } else {
                                $status = 300;
                                $statusCode = 401;
                                $message = "Transaction is declined, please another time";
                            }
                        } else {
                            $status = 300;
                            $statusCode = 401;
                            $message = "Some error occured";
                        }
                    } else {
                        $status = 300;
                        $statusCode = 401;
                        $message = "No user found";
                    } 
                    
                } else {
                    $status = 300;
                    $statusCode = 401;
                    $message = "Unauthenticated user";
                }
            } else {
                $status = 300;
                $statusCode = 404;
                $message = "Please send required parameters";
            }
        } else {
            $status = 300;
            $statusCode = 404;
            $message = "Authorization required";
        }
        
        $response = array('status'=>$status, 'message'=>$message, 'result'=>$output);
        
        return response()->json($response);
    }

    
    /**
     * Circle terminate request.
     *
     * @param Json ApiRequest $request
     *
     * @return \Illuminate\Http\JsonResponse
     * @throws GeneralException
     */
    public function circleTerminateRequest(Request $request)
    {
        $response = array();
        $output = array();
        $json = file_get_contents('php://input');
        $obj = json_decode($json, TRUE);

        $circle_code = (isset($obj['circle_code']) ? $obj['circle_code'] : '');
        $mobile_number = (isset($obj['mobile_number']) ? $obj['mobile_number'] : '');
        $authorization = explode('Bearer ', $request->header('Authorization'));
        $authorization = end($authorization);

        if($authorization){
            if($circle_code!='' && $mobile_number!='') {
                $user_authorize = $this->userRepository->findByCondition(array('remember_token'=>$authorization));
                //print_r($authorization);die;
                if(count($user_authorize) > 0) {
                    $update = $this->circleUserRepository->updateByCondition(array('circle_code'=>$circle_code,'mobile_number'=>$mobile_number),array('termination_request_status'=>1));
                    $status = 100;
                    $statusCode = 200;
                    $message = 'Terminated request sent successfully';
                } else {
                    $status = 300;
                    $statusCode = 401;
                    $message = "Unauthenticated user";
                }
            } else {
                $status = 300;
                $statusCode = 404;
                $message = "Please send circle code";
            }
        } else {
            $status = 300;
            $statusCode = 404;
            $message = "Authorization required";
        }
        
        $response = array('status'=>$status, 'request_status'=>1, 'message'=>$message, 'result'=>$output);
        
        return response()->json($response);
    }

    /**
     * Blocked Circle payment.
     *
     * @param Json ApiRequest $request
     *
     * @return \Illuminate\Http\JsonResponse
     * @throws GeneralException
     */
    public function blockedCirclePayment(Request $request)
    {
        $response = array();
        $output = array();
        $circleUserDetails = array();
        $json = file_get_contents('php://input');
        $obj = json_decode($json, TRUE);
        
        $circle_code = (isset($obj['circle_code']) ? $obj['circle_code'] : '');
        $round_no = (isset($obj['round_no']) ? $obj['round_no'] : '');
        $trn_id = (isset($obj['trn_id']) ? $obj['trn_id'] : '');
        $trn_status = (isset($obj['trn_status']) ? $obj['trn_status'] : '');
        $amount = (isset($obj['amount']) ? $obj['amount'] : '');
        $payment_mode = (isset($obj['payment_mode']) ? $obj['payment_mode'] : '');
        $payment_date = date('Y-m-d',strtotime(str_replace('/', '-', $obj['payment_date'])));
        $stripeToken = (isset($obj['stripeToken']) ? $obj['stripeToken'] : '');
        $authorization = explode('Bearer ', $request->header('Authorization'));
        $authorization = end($authorization);
        $check = 0;

        if($authorization){
            if($circle_code!='' && $round_no!='' && $trn_status!='' && $amount!='' && $payment_mode!='') {
                $user_authorize = $this->userRepository->findByCondition(array('remember_token'=>$authorization));
                if(count($user_authorize) > 0) {
                    $nextround_no = $round_no + 1;
                    $circleNextRoundDetails = $this->circleRoundRepository->findByCondition(array('circle_code'=>$circle_code, 'round_no'=>$nextround_no));
                    $circleRoundDetails = $this->circleRoundRepository->findByCondition(array('circle_code'=>$circle_code, 'round_no'=>$round_no));
                    if($circleNextRoundDetails->count()>0){
                        if(strtotime($circleNextRoundDetails[0]->payments_grace_date) <= strtotime($payment_date)){
                            $check = 1;
                        }
                    }
                    if($circleRoundDetails->count()>0){
                        
                        if($check==0){
                            $circleUserDetails = $this->circleUserRepository->findByCondition(array('circle_code'=>$circle_code, 'mobile_number'=>$user_authorize[0]->mobile_number));
                            if(count($circleUserDetails)==0){
                                $circleUserDetails = $this->circleUserRepository->findByCondition(array('circle_code'=>$circle_code, 'user_id'=>$user_authorize[0]->id, 'mobile_number'=>$user_authorize[0]->mobile_number));
                            }
                            if(count($circleUserDetails)>0){
                                $inst_arr = [
                                    'circle_code'   => $circle_code,
                                    'circle_user_id'   => $circleUserDetails[0]->id,
                                    'round_id'   => $circleRoundDetails[0]->id,
                                    'trn_id'   => $trn_id,
                                    'trn_status'   => $trn_status,
                                    'amount'   => $amount,
                                    'payment_mode' => $payment_mode
                                ];
                                $create = $this->circleRoundPaymentRepository->create($inst_arr);
                                if($create){
                                    $payment_result = "";
                                    if($payment_mode==2){
                                        $payment_result = $this->stripe_payment($stripeToken, $amount);
                                        if($payment_result != 'declined'){ 
                                            $this->circleRoundPaymentRepository->updateByCondition(array('id'=>$create->id), array('trn_id'=>$payment_result,'trn_status'=>1)); 
                                            //$update = $this->circleRepository->updateByCondition(array('circle_code'=>$circle_code),array('status'=>1));
                                            $paidUsers = $this->circleRoundPaymentRepository->findByCondition(array('circle_code'=>$circle_code, 'round_id'=>$circleRoundDetails[0]->id, 'trn_status'=>1,'payment_type'=>1));
                                            //echo count($paidUsers).'=='.$circle[0]->no_of_member;die;
                                            $circleData = $this->circleRepository->findByCondition(array('circle_code'=>$circle_code));
                                            if($paidUsers->count()==$circleData[0]->no_of_member){
                                                $this->circleRepository->updateByCondition(array('circle_code'=>$circle_code), array('completed_round'=>$circleRoundDetails[0]->round_no,'status'=>1));
                                                $this->circleRoundRepository->updateByCondition(array('id'=>$circleRoundDetails[0]->id), array('payment_status'=>1));
                                            }
                                        }
                                    }
                                    if($payment_result != 'declined'){
                                        /*************email********************/
                                        //$to = 'sayan@digitalaptech.com';
                                        $to = $user_authorize[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_authorize[0]->first_name.'</span> </p>
                                                            </td>
                                                        </tr>
                                                        <tr>
                                                            <td style="font-family: sans-serif; color: #333; padding: 0px 10px 40px; font-size: 16px; line-height: 30px;">
                                                               <p>Your payment for the circle is done, please wait for admin approval.</p>
                                                               <p>Please find the follwing payment details:</p>
                                                               
                                                               <p>Circle Code: '.$circle_code.'</p>
                                                               <p>Amount: '.$amount.'</p>
                                                            </td>
                                                        </tr>
                                                        <tr>
                                                            <td style="font-family: sans-serif; color: #333; padding: 0px 10px 40px; font-size: 16px; line-height: 30px;">
                                                               <p>Stay connected with us. We appreciate very much your trust in us.</p>
                                                               <p>Please do not hesitate to contact us for any other requests.</p>
                                                            </td>
                                                        </tr>';
                                                //echo $email_text; die;
                                        $data['email_text'] = $email_text;    
                                        Mail::send('mail.email_template', $data, function($message) use ($to)
                                        {
                                            $message->from('testdevloper007@gmail.com', 'DART APP');
                                            $message->to($to);
                                            $message->subject('Circle payment mail');
                                        });
                                        /*************email********************/
                                        $status = 100;
                                        $statusCode = 200;
                                        $message = 'Payment done successfully';
                                        if($payment_mode==1){
                                            $message = 'Payment done successfully, wait for admin approval';
                                        }
                                    } else {
                                        $status = 300;
                                        $statusCode = 401;
                                        $message = "Transaction is declined, please another time";
                                    } 
                                } else {
                                    $status = 300;
                                    $statusCode = 401;
                                    $message = "Some error occured";
                                }
                            } else {
                                $status = 300;
                                $statusCode = 401;
                                $message = "No user found";
                            } 
                        } else {
                            $status = 300;
                            $statusCode = 401;
                            $message = "Payment date exceeded";
                        } 
                        
                    } else {
                        $status = 300;
                        $statusCode = 401;
                        $message = "No round found";
                    } 
                    
                } else {
                    $status = 300;
                    $statusCode = 401;
                    $message = "Unauthenticated user";
                }
            } else {
                $status = 300;
                $statusCode = 404;
                $message = "Please send all required parameters";
            }
        } else {
            $status = 300;
            $statusCode = 404;
            $message = "Authorization required";
        }
        
        $response = array('status'=>$status, 'message'=>$message, 'result'=>$output);
        
        return response()->json($response);
    }




    /**
     * Circle refund payment.
     *
     * @param Json ApiRequest $request
     *
     * @return \Illuminate\Http\JsonResponse
     * @throws GeneralException
     */
    public function circleRefundPayment(Request $request)
    {
        $response = array();
        $output = array();
        $circleUserDetails = array();
        $json = file_get_contents('php://input');
        $obj = json_decode($json, TRUE);
        
        $circle_code = (isset($obj['circle_code']) ? $obj['circle_code'] : '');
        $trn_id = (isset($obj['trn_id']) ? $obj['trn_id'] : '');
        $trn_status = (isset($obj['trn_status']) ? $obj['trn_status'] : '');
        $amount = (isset($obj['amount']) ? $obj['amount'] : '');
        $payment_mode = (isset($obj['payment_mode']) ? $obj['payment_mode'] : '');
        $payment_date = date('Y-m-d',strtotime(str_replace('/', '-', $obj['payment_date'])));
        $stripeToken = (isset($obj['stripeToken']) ? $obj['stripeToken'] : '');
        $authorization = explode('Bearer ', $request->header('Authorization'));
        $authorization = end($authorization);

        if($authorization){
            if($circle_code!='' && $trn_status!='' && $amount!='' && $payment_mode!='') {
                $user_authorize = $this->userRepository->findByCondition(array('remember_token'=>$authorization));
                if(count($user_authorize) > 0) {
                    $circleUserDetails = $this->circleUserRepository->findByCondition(array('circle_code'=>$circle_code, 'mobile_number'=>$user_authorize[0]->mobile_number));
                    if(count($circleUserDetails)==0){
                        $circleUserDetails = $this->circleUserRepository->findByCondition(array('circle_code'=>$circle_code, 'user_id'=>$user_authorize[0]->id, 'mobile_number'=>$user_authorize[0]->mobile_number));
                    }
                    if(count($circleUserDetails)>0){
                        $inst_arr = [
                            'circle_code'   => $circle_code,
                            'circle_user_id'   => $circleUserDetails[0]->id,
                            'round_id'   => 0,
                            'trn_id'   => $trn_id,
                            'trn_status'   => $trn_status,
                            'amount'   => $amount,
                            'payment_mode' => $payment_mode
                        ];
                        $create = $this->circleRoundPaymentRepository->create($inst_arr);
                        if($create){
                            $payment_result = "";
                            if($payment_mode==2){
                                $payment_result = $this->stripe_payment($stripeToken, $amount);
                                if($payment_result != 'declined'){ 
                                    $this->circleRoundPaymentRepository->updateByCondition(array('id'=>$create->id), array('trn_id'=>$payment_result,'trn_status'=>1)); 
                                }
                            }
                            $this->circleRoundPaymentRepository->updateByCondition(array('id'=>$create->id), array('payment_type'=>3)); 
                            /*************email********************/
                            if($payment_result != 'declined'){
                                //$to = 'sayan@digitalaptech.com';
                                $to = $user_authorize[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_authorize[0]->first_name.'</span> </p>
                                                    </td>
                                                </tr>
                                                <tr>
                                                    <td style="font-family: sans-serif; color: #333; padding: 0px 10px 40px; font-size: 16px; line-height: 30px;">
                                                       <p>Your payment for the circle is done, please wait for admin approval.</p>
                                                       <p>Please find the follwing payment details:</p>
                                                       
                                                       <p>Circle Code: '.$circle_code.'</p>
                                                       <p>Amount: '.$amount.'</p>
                                                    </td>
                                                </tr>
                                                <tr>
                                                    <td style="font-family: sans-serif; color: #333; padding: 0px 10px 40px; font-size: 16px; line-height: 30px;">
                                                       <p>Stay connected with us. We appreciate very much your trust in us.</p>
                                                       <p>Please do not hesitate to contact us for any other requests.</p>
                                                    </td>
                                                </tr>';
                                        //echo $email_text; die;
                                $data['email_text'] = $email_text;    
                                Mail::send('mail.email_template', $data, function($message) use ($to)
                                {
                                    $message->from('testdevloper007@gmail.com', 'DART APP');
                                    $message->to($to);
                                    $message->subject('Circle refund payment mail');
                                });
                                /*************email********************/
                                $status = 100;
                                $statusCode = 200;
                                $message = 'Payment done successfully';
                                if($payment_mode==1){
                                    $message = 'Payment done successfully, wait for admin approval';
                                }
                            } else {
                                $status = 300;
                                $statusCode = 401;
                                $message = "Transaction is declined, please another time";
                            }
                        } else {
                            $status = 300;
                            $statusCode = 401;
                            $message = "Some error occured";
                        }
                    } else {
                        $status = 300;
                        $statusCode = 401;
                        $message = "No user found";
                    } 
                        
                    
                } else {
                    $status = 300;
                    $statusCode = 401;
                    $message = "Unauthenticated user";
                }
            } else {
                $status = 300;
                $statusCode = 404;
                $message = "Please send all required parameters";
            }
        } else {
            $status = 300;
            $statusCode = 404;
            $message = "Authorization required";
        }
        
        $response = array('status'=>$status, 'message'=>$message, 'result'=>$output);
        
        return response()->json($response);
    }


    /**
     * Reminder Sending.
     *
     * @param Json ApiRequest $request
     *
     * @return \Illuminate\Http\JsonResponse
     * @throws GeneralException
     */
    public function reminderSend(Request $request)
    {
        $response = array();
        $output = array();
        $json = file_get_contents('php://input');
        $obj = json_decode($json, TRUE);

        $circle_code = (isset($obj['circle_code']) ? $obj['circle_code'] : '');
        $user_type = (isset($obj['user_type']) ? $obj['user_type'] : ''); //1->admin, 2->user
        $screen = (isset($obj['screen']) ? $obj['screen'] : ''); //1->waiting, 2->block
        $authorization = explode('Bearer ', $request->header('Authorization'));
        $authorization = end($authorization);
        $err = 0;
        $send = 0;
        $notify_response = 0;
        if($authorization){
            if($circle_code!='') {
                $user_authorize = $this->userRepository->findByCondition(array('remember_token'=>$authorization));
                
                if(count($user_authorize) > 0) {
                    $circleDetails = $this->circleRepository->findByCondition(array('circle_code'=>$circle_code));
                    if(count($circleDetails)>0){
                        
                        if($user_type==2 && $screen==2){
                            $circlesAdminDetails = $this->userDeviceTokenRepository->findByCondition(array('user_id'=>$circleDetails[0]->user_id));
                            $content = array(
                                "en" => 'DART Circle Reminder To Admin for Circle Code:'.$circle_code
                            );
                            $notify_response = $this->siteSettingsRepository->notification($circlesAdminDetails[0]->device_tokens, $circle_code, $content);
                            //echo '<pre>'; print_r($circlesAdminDetails);die;
                        } else {
                            $circleusers = $this->circleUserRepository->findByCondition(array('circle_code'=>$circle_code));
                            //echo '<pre>'; print_r($circleusers);die;
                            if($circleusers){
                                foreach ($circleusers as $key => $value) {
                                    $circle_user_details = $this->userRepository->findByCondition(array('mobile_number'=>$value->mobile_number));
                                    if($circle_user_details->count()>0){
                                        $userdetails = $this->userDeviceTokenRepository->findByCondition(array('user_id'=>$circle_user_details[0]->id));
                                        if($userdetails->count()>0){
                                            if($screen==2){
                                                $current_round = (($circleDetails[0]->estimate_round - $circleDetails[0]->completed_round)>0) ? ($circleDetails[0]->completed_round + 1) : $circleDetails[0]->estimate_round;

                                                $circleCurrentRoundDetails = $this->circleRoundRepository->findByCondition(array('circle_code'=>$circle_code, 'round_no'=>$current_round));

                                                $circleCurrentRoundPaymentDetails = $this->circleRoundPaymentRepository->findByCondition(array('circle_code'=>$circle_code, 'round_id'=>$circleCurrentRoundDetails[0]->id,'circle_user_id'=>$value->id,'payment_type'=>1, 'trn_status'=>1));
                                                if($circleCurrentRoundPaymentDetails->count()==0){
                                                    $content = array(
                                                        "en" => 'DART Circle Payment Reminder for Circle Code:'.$circle_code
                                                    );
                                                    $notify_response = $this->siteSettingsRepository->notification($userdetails[0]->device_tokens, $circle_code, $content);
                                                }
                                            } else {
                                                if($value->accept_status==0){
                                                    $content = array(
                                                        "en" => 'DART Circle Joining Reminder for Circle Code:'.$circle_code
                                                    );
                                                    $notify_response = $this->siteSettingsRepository->notification($userdetails[0]->device_tokens, $circle_code, $content);
                                                } 
                                            }
                                            if($notify_response==1){
                                                $send = 1;
                                            }
                                        } else {
                                            $err = 1;
                                        }
                                    } else {
                                        $err = 1;
                                    }
                                }
                            }
                        }
                        //echo $err.'|'.$notify_response;die;
                        if($err == 0 && $send == 1){
                            $status = 100;
                            $statusCode = 200;
                            $message = "Reminder sent";
                        } else {
                            $status = 300;
                            $statusCode = 401;
                            $message = "The users device is not registered..";
                        }
                    }  else {
                        $status = 300;
                        $statusCode = 401;
                        $message = "No circle found";
                    }
                } else {
                    $status = 300;
                    $statusCode = 401;
                    $message = "Unauthenticated user";
                }
            } else {
                $status = 300;
                $statusCode = 404;
                $message = "Please send circle code";
            }
        } else {
            $status = 300;
            $statusCode = 404;
            $message = "Authorization required";
        }
        
        $response = array('status'=>$status, 'message'=>$message, 'result'=>$output);
        
        return response()->json($response);
    }





    /**
     * Stripe Payments.
     *
     * @param $stripeToken, $amount
     *
     * @return \Illuminate\Http\JsonResponse
     * @throws GeneralException
     */
    public function stripe_payment($stripeToken, $amount){
        $currecy = $this->curencyRepository->findByCondition(array('status'=>1));
        $currecy_code = 'eur';
        if($currecy){
            $currecy_code = $currecy->currency_short_name;
        }
        require_once($_SERVER['DOCUMENT_ROOT'].'/dart/vendor/stripe/stripe-php/init.php');
        \Stripe\Stripe::setApiKey($this->apikey);
        try {
                $charge = \Stripe\Charge::create ([
                        "amount" => $amount * 100,
                        "currency" => $currecy_code,
                        "source" => $stripeToken,
                        "description" => "Test payment from itsolutionstuff.com." 
                ]);
                $result = $charge->id;
                
            } catch(\Stripe\CardError $e) {          
             
                $error = $e->getMessage();
                $result = "declined";
             
            } catch (\Stripe\InvalidRequestError $e) {
                $result = "declined";         
            } catch (\Stripe\AuthenticationError $e) {
                $result = "declined";
            } catch (\Stripe\ApiConnectionError $e) {
                $result = "declined";
            } catch (\Stripe\Error $e) {
                $result = "declined";
            } catch (\Exception $e) {
                if ($e->getMessage() == "zip_check_invalid") {
                    $result = "declined";
                } else if ($e->getMessage() == "address_check_invalid") {
                    $result = "declined";
                } else if ($e->getMessage() == "cvc_check_invalid") {
                    $result = "declined";
                } else {
                    $result = "declined";
                }         
            }
        //echo $result; print_r($e->getMessage()); die;    
        return $result;
    }
}
