<?php

namespace App\Http\Controllers\Cron;

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\CircleRoundRepository;
use App\Repositories\CircleRoundPaymentRepository;
use Illuminate\Support\Facades\Mail;
use App\Repositories\CurrencyRepository;
use App\Models\Circle;

/**
 * Class CronController.
 */
class CronController extends Controller
{
    /**
     * @var UserRepository
     * @var CircleUserRepository
     * @var CircleRepository
     * @var CircleRoundRepository
     * @var CircleRoundPaymentRepository
     * @var CurrencyRepository
     */
    protected $userRepository;
    protected $circleUserRepository;
    protected $circleRepository;
    protected $circleRoundRepository;
    protected $circleRoundPaymentRepository;
    protected $currencyRepository;

    /**
     * CronController constructor.
     *
     * @param ApiRepository $apiRepository
     * @param UserRepository $userRepository
     * @param CircleUserRepository $circleUserRepository
     * @param CircleRepository $circleRepository
     * @param CircleRoundPaymentRepository $circleRoundPaymentRepository
     * @param CurrencyRepository $currencyRepository
     */
    public function __construct(UserRepository $userRepository, CircleRepository $circleRepository, CircleUserRepository $circleUserRepository, CircleRoundRepository $circleRoundRepository, CircleRoundPaymentRepository $circleRoundPaymentRepository, CurrencyRepository $currencyRepository)
    {
        $this->userRepository = $userRepository;
        $this->circleUserRepository = $circleUserRepository;
        $this->circleRepository = $circleRepository;
        $this->circleRoundRepository = $circleRoundRepository;
        $this->circleRoundPaymentRepository = $circleRoundPaymentRepository;
        $this->currencyRepository = $currencyRepository;
    }


    /**
     * Circle status update on start date
     *
     * @param Json ApiRequest $request
     *
     * @return \Illuminate\Http\JsonResponse
     * @throws GeneralException
     */
    public function circleStartStatus(Request $request)
    {
        Mail::raw('circleStartStatus running', function ($message) {
            $message->to('testdevloper007@gmail.com');
        });
        //$current_date = date('Y-m-d');
        $current_date = date('2019-09-11');
        $start_date = date('Y-m-d', strtotime($current_date . ' -1 day'));
        $circles = $this->circleRepository->findByCondition(array('start_date'=>$start_date,'status'=>0));
        if($circles){
            foreach ($circles as $key => $value) {
                $circleUsers = $this->circleUserRepository->findByCondition(array('circle_code'=>$value->circle_code, 'accept_status'=>0));
                //dd($value);;die;
                if($circleUsers->count()>0){
                    $this->circleRepository->updateByCondition(array('circle_code'=>$value->circle_code), array('status'=>0));
                } else {
                    $this->circleRepository->updateByCondition(array('circle_code'=>$value->circle_code), array('status'=>1));
                }
            }    
        }
        echo $start_date.' Successfull';
    }

    /**
     * Circle round payment status update before payment grace date
     *
     * @param Json ApiRequest $request
     *
     * @return \Illuminate\Http\JsonResponse
     * @throws GeneralException
     */
    public function roundPaymentStatusBeforeGraceDate(Request $request)
    {
        Mail::raw('roundPaymentStatusBeforeGraceDate running', function ($message) {
            $message->to('testdevloper007@gmail.com');
        });
        //$current_date = '2019-09-29';
        $current_date = date('Y-m-d');
        $grace_date = date('Y-m-d', strtotime($current_date . ' -1 day'));
        $rounds = $this->circleRoundRepository->findByCondition(array('payments_grace_date'=>$grace_date,'payment_status'=>0));
        //dd($rounds);
        if($rounds){
            foreach ($rounds as $key => $value) {
                $circle = $this->circleRepository->findByCondition(array('circle_code'=>$value->circle_code));
                //dd($circleUsers);
                if(count($circle)>0){
                    $paidUsers = $this->circleRoundPaymentRepository->findByCondition(array('circle_code'=>$value->circle_code, 'round_id'=>$value->id, 'trn_status'=>1,'payment_type'=>1));
                    //echo count($paidUsers).'=='.$circle[0]->no_of_member;die;
                    if(count($paidUsers)==$circle[0]->no_of_member){
                        $this->circleRepository->updateByCondition(array('circle_code'=>$value->circle_code), array('completed_round'=>$value->round_no,'status'=>1));
                        $this->circleRoundRepository->updateByCondition(array('id'=>$value->id), array('payment_status'=>1));
                    } else {
                        $this->circleRepository->updateByCondition(array('circle_code'=>$value->circle_code), array('status'=>2));
                    }
                }
            }    
        }
        echo $grace_date.' Successfull';
    }

    /**
     * Circle round payment reminder
     *
     * @param Json ApiRequest $request
     *
     * @return \Illuminate\Http\JsonResponse
     * @throws GeneralException
     */
    public function roundPaymentReminder(Request $request)
    {
        Mail::raw('roundPaymentReminder running', function ($message) {
            $message->to('testdevloper007@gmail.com');
        });

        $current_date = date('Y-m-d');
        //$current_date = '2019-09-25';
        $rounds = $this->circleRoundRepository->findByCondition(array('payments_date'=>$current_date,'payment_status'=>0));
        $curreny = $this->currencyRepository->findByCondition(array('status'=>1));
        if($rounds){
            foreach ($rounds as $key => $value) {
                $circle_users = $this->circleUserRepository->findByCondition(array('circle_code'=>$value->circle_code));
                $circle_details = $this->circleRepository->findByCondition(array('circle_code'=>$value->circle_code));
                if($circle_users->count()>0){
                    foreach ($circle_users as $userkey => $userval) {
                        $paidUsers = $this->circleRoundPaymentRepository->findByCondition(array('circle_code'=>$value->circle_code, 'round_id'=>$value->id, 'circle_user_id'=>$userval->id,'payment_type'=>1));
                        //echo '--'.$paidUsers->count().'=';
                        if($paidUsers->count()==0){
                            $userDetails = $this->userRepository->findByCondition(array('mobile_number'=>$userval->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 next circle outstanding payment is pending.</p>
                                                       <p>Please find the follwing payment details:</p>
                                                       
                                                       <p>Circle Code: '.$value->circle_code.'</p>
                                                       <p>Round No.: '.$value->round_no.'</p>
                                                       <p>Outstanding Payment Date: '.$value->payments_date.'</p>
                                                       <p>Outstanding Amount: '.$curreny->curr_code.' '.$circle_details[0]->round_set.'</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 Reminder mail');
                                });
                                /*************email********************/
                            }
                        }
                    }
                }
            }    
        }
        echo $current_date.' Successfull';
    }


    public function circleSuspend(Request $request)
    {
        Mail::raw('circleSuspend running', function ($message) {
            $message->to('testdevloper007@gmail.com');
        });
        
        $current_date = date('Y-m-d');
        $grace_date = date('Y-m-d', strtotime($current_date . ' -1 day'));
        $rounds = $this->circleRoundRepository->findByCondition(array('payments_grace_date'=>$grace_date,'payment_status'=>0));
        $g_date = "";
        // dd($rounds);
        if($rounds){
            // dd($rounds);
            foreach ($rounds as $key => $value) {
                $circle = $this->circleRepository->findByCondition(array('circle_code'=>$value->circle_code));
                // dd($circle);

                foreach ($circle as $key => $val) {
                    if($val->p_round =='weekly')
                    {
                        $g_date = date('Y-m-d', strtotime($current_date . ' -8 day'));
                    }
                    elseif($val->p_round =='bi-weekly')
                    {
                        $g_date = date('Y-m-d', strtotime($current_date . ' -15 day'));
                    }
                    elseif($val->p_round =='monthly')
                    {
                        $g_date = date('Y-m-d', strtotime($current_date . ' -31 day'));
                    }
                    else
                    {
                        $g_date = date('Y-m-d', strtotime($current_date . ' -11 day'));
                    }

                    // dd($g_date);

                    $ter_rounds = $this->circleRoundRepository->findByCondition(array('payments_grace_date'=>$g_date,'payment_status'=>0));

                    // dd($ter_rounds);

                    if($ter_rounds)
                    {
                        foreach ($ter_rounds as $key => $val1) 
                        {
                            $ter_circle = $this->circleRepository->findByCondition(array('circle_code'=>$val1->circle_code, 'status'=>2));
                            if(count($ter_circle)>0)
                            {
                                    $this->circleRepository->updateByCondition(array('circle_code'=>$val1->circle_code), array('status'=>3));
                            } 
                        }
                    }  
                }
            }    
        }
        
        echo $g_date.'suspend Successfull';
    }
}
