<?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 = '2020-05-20';
        // $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,'circle_code'=>'1588054318859'));
        //dd($rounds); 

       
//        $this->pr($rounds);
//        exit;
        if ($rounds) {
            foreach ($rounds as $key => $value) {
                $circle = $this->circleRepository->findByCondition(array('circle_code' => $value->circle_code));
//                $this->pr($circle);
                if (count($circle) > 0) {
                    $paidUsers = $this->circleRoundPaymentRepository->findByCondition(array('circle_code' => $value->circle_code, 'round_id' => $value->id, 'trn_status' => 1, 'payment_type' => 1));
                     // $this->pr($paidUsers);
                    
                   // echo '<br>'.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';
    }

    public function pr($array) {
        echo '<pre>';
        print_r($array);
        exit;
    }

    /**
     * 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';
    }

}
