<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Hash;
use App\Repository\AdminRepository;
use Illuminate\Http\Request;
use App\Models\Auth\User;
use App\Models\Auth\Currency;
use App\Models\CircleUserTemp;
use App\Models\CircleRoundPayment;
use App\Models\CircleUser;
use App\Models\CircleRound;
use App\Models\Circle;
use Auth;
use Image;
use File;

class CircleController extends Controller {

    

    public function index(AdminRepository $CircleRepository) 
    {
        // $table = new Circle;
       	// $where = array();
        // $circle = $CircleRepository->getAllByWherePaginate($table, $where, 10);
        $circle = Circle::select('*')
                          ->get();
        // foreach ($circle as $key => $value) 
        // {
        //     if($value->status != 2)
        //     {
        //         $suspend_req = CircleUser::select('*')
        //                    ->where('circle_code', $value->circle_code)
        //                    ->where('termination_request_status', 1)
        //                    ->get();
        //         // if($suspend_req)
        //         // {
        //         //     // $suspend_req[] = $value->circle_code;
        //         //     $suspend_req;
        //         // }
        //     }
            
        //     print_r($suspend_req);
        // }
        // exit;
       return view('admin.pages.circle.list', compact('circle'));
    }


    public function status(AdminRepository $AdminRepository, $id)
    {
        $user_id = base64_decode($id);
        $table = new Circle;


        $userData = $AdminRepository->getById($user_id, $table);

        $userActive = $userData->status;
        
        if($userActive == 1)
        {
            $data = array('status' => 0);                
        }
        else
        {
            $data = array('status' => 1);                 
        }

        $status = $AdminRepository->update($data, $user_id, false, $table);
            if($status)
            {
                session()->flash('success', 'User Status Changed Successfully');
                return redirect()->route('circle.circleList');
            }
            else
            {
                session()->flash('error', 'Sorry, But User Status Was Not Changed Successfully; Please Try Again');
                return redirect()->route('circle.circleList');
            }
            
            
    }


    
    public function add(AdminRepository $AdminRepository)
    {
        // $table = new User;
        // $where = array('role_id' => 2);
        // $user = $AdminRepository->getAllByWhere($table, $where);
        $user = User::select('users.*')
                     ->where('role_id', 2)
                     ->where('status', 1)
                     ->where('confirmed', 1)
                     ->orderBy('email', 'asc')
                     ->get();

        $today_date = date('Y-m-d');
        $min_date = date('Y-m-d', strtotime($today_date. ' + 10 days'));
        $max_date = date('Y-m-d', strtotime($today_date. ' + 60 days'));

        $curr = Currency::where('status', '=', 1)->where('is_deleted', '=', 1)->get();

        return view('admin.pages.circle.add', compact('user', 'min_date', 'max_date', 'curr'));
    }


    public function store(AdminRepository $AdminRepository, Request $request)
    {
        $curr = Currency::where('curr_code', '=', $request->input('curr'))->first();

        $total_rev = $request->input('tta');
        $per_person_rev = $request->input('rs');
        $total_person = count($request->input('aptts'));

        // $total_person_rev = $per_person_rev * $total_person;

        // $rev = $total_rev/$total_person_rev;


        // $round1 = round($rev);

        // if($rev>$round1)
        // {
        //     $round = $round1+1;
        // }
        // else
        // {
        //     $round = $round1;
        // }

        $rev = $total_rev/$per_person_rev;

        $round1 = round($rev);

        if($rev>$round1)
        {
            $round = $round1+1;
        }
        else
        {
            $round = $round1;
        }

        // dd($round);

        if($request->input('pof') == 'bi-weekly')
        {
            if($per_person_rev<=750)
            {
                $total = $round*14;    
            }
            else
            {
                session()->flash('errors', 'Please Try Again! It Sholud Be Below 750 Euros');
                return redirect()->route('circle.circleAdd');
            }
            
        }
        else if($request->input('pof') == 'monthly')
        {
            if($per_person_rev<=1000)
            {
                $total = $round*30;    
            }
            else
            {
                session()->flash('errors', 'Please Try Again! It Sholud Be Below 1000 Euros');
                return redirect()->route('circle.circleAdd');
            }
            
        }
        else if($request->input('pof') == 'weekly')
        {
            if($per_person_rev<=500)
            {
                $total = $round*7;
            }
            else
            {
                session()->flash('errors', 'Please Try Again! It Sholud Be Below 500 Euros');
                return redirect()->route('circle.circleAdd');
            }
            
        }
        else
        {
            if($per_person_rev<=750)
            {
                $total = $round*10;    
            }
            else
            {
                session()->flash('errors', 'Please Try Again! It Sholud Be Below 750 Euros');
                return redirect()->route('circle.circleAdd');
            }
            
        }


        $start_date = $request->input('wsd');
        $end_date = date('Y-m-d', strtotime($start_date. ' + '.$total.' days'));

        if($total<180)
        {
            $table = new Circle;
            $data = array(
                    'user_id' => 7,
                    'circle_code' => time(),
                    'target_achive' => $total_rev,
                    'round_set' => $per_person_rev,
                    'p_round' => $request->input('pof'),
                    'no_of_member' => $total_person,
                    'reason_for_circle' => $request->input('prftc'),
                    'start_date' => $start_date,
                    'end_date' => $end_date,
                    'estimate_round' => intval($round),
                    'status' => 1

            );

            $circle = $AdminRepository->create($data, $table);
            $p=1;
            foreach ($request->input('aptts') as $value) 
            {

                $table1 = new User;
                $user = $AdminRepository->getById($value, $table1);

                $table2 = new CircleUser;
                $user_data = array(
                        'user_id' => 7,
                        'username' => $user->first_name,
                        'mobile_number' => $user->mobile_number,
                        'circle_code' => $circle->circle_code,
                        'preference' => $p++,
                        'accept_status' => 0,
                        'termination_request_status' => 0
                );

                $circle_temp = $AdminRepository->create($user_data, $table2);
                
            }
            $table3 = new CircleRound;
            for($i=1; $i<=intval($round);$i++){
                if($request->input('pof') == 'weekly') {
                    $payments_date = date('Y-m-d', strtotime($start_date. ' + '.($i*7).' days'));
                    $payments_grace_date = date('Y-m-d', strtotime($start_date. ' + '.(($i*7)+1).' days'));
                } elseif($request->input('pof') == 'bi-weekly') {
                    $payments_date = date('Y-m-d', strtotime($start_date. ' + '.($i*14).' days'));
                    $payments_grace_date = date('Y-m-d', strtotime($start_date. ' + '.(($i*14)+2).' days'));
                } else if($request->input('pof') == 'monthly') {
                    $payments_date = date('Y-m-d', strtotime($start_date. ' + '.($i*30).' days'));
                    $payments_grace_date = date('Y-m-d', strtotime($start_date. ' + '.(($i*30)+4).' days'));
                } else {
                    $payments_date = date('Y-m-d', strtotime($start_date. ' + '.($i*10).' days'));
                    $payments_grace_date = date('Y-m-d', strtotime($start_date. ' + '.(($i*10)+1).' days'));
                }
                $instCircleArr = array(
                                    'circle_code'=>$circle->circle_code,
                                    'round_no'=>$i,
                                    'payments_date'=>$payments_date,
                                    'payments_grace_date'=>$payments_grace_date
                                );
                $instCircle = $AdminRepository->create($instCircleArr, $table3);
            }

            if($circle_temp)
            {
                    session()->flash('success', 'New Circle Created Succesfully');
                    return redirect()->route('circle.circleList');
            }
            else
            {
                session()->flash('errors', 'Please Try Again! New Circle Was Not Created Succesfully');
                return redirect()->route('circle.circleAdd');
            }
        }
        else
        {
            session()->flash('errors', 'Please Try Again! Your Created Circle Is Exceed Six Months');
            return redirect()->route('circle.circleAdd');
        }
    }


    public function payment(AdminRepository $AdminRepository)
    {
        $circle_payment = CircleRoundPayment::select('*')
                          ->get();
        // dd($circle_payment);
        return view('admin.pages.circle.payment', compact('circle_payment'));

    }


    public function payment_status(AdminRepository $AdminRepository, $id)
    {
        $payment_id = base64_decode($id);
        $date = date('Y-m-d H:i:s');
        $table = new CircleRoundPayment;
        $table1 = new CircleUser;
        $table2 = new Circle;
        $table3 = new CircleRound;

        $payment = CircleRoundPayment::find($payment_id);
        $user = CircleUser::find($payment->circle_user_id);

        $paymentdata = array('trn_status' => 1);                
        $paymentstatus = $AdminRepository->update($paymentdata, $payment_id, false, $table);

        $userdata = array('accept_status' => 1, 'status_date' => $date);
        $userstatus = $AdminRepository->update($userdata, $payment->circle_user_id, false, $table1);

        $roundpayment = CircleRoundPayment::where('circle_code', $payment->circle_code)
                                  ->where('round_id', $payment->round_id)
                                  ->where('trn_status', 1)
                                  ->where('payment_type', 1)
                                  ->get();

        $count = count($roundpayment);

        $circle = Circle::where('circle_code', $payment->circle_code)->first();

        if($count == $circle->no_of_member)
        {
            $circledata = array('status' => 1);
            $circlestatus = $AdminRepository->update($circledata, $circle->id, false, $table2);

            $round = CircleRound::where('circle_code', $payment->circle_code)->first();

            $rounddata = array('payment_status' => 1);
            $roundstatus = $AdminRepository->update($rounddata, $round->id, false, $table3);
        }

        // dd($count);        
        
        if($userstatus)
            {
                session()->flash('success', 'Payment Status Changed Successfully');
                return redirect()->route('circle.payment');
            }
            else
            {
                session()->flash('errors', 'Sorry, But Payment Status Was Not Changed Successfully; Please Try Again');
                return redirect()->route('circle.payment');
            }
        
    }


    public function circle_details(AdminRepository $AdminRepository, $id)
    {
        $circle_id = base64_decode($id);

        $circle = Circle::find($circle_id);
        $circle_code = $circle->circle_code;
        $round = CircleRound::where('circle_code', $circle_code)->get();

        return view('admin.pages.circle.details', compact('round', 'circle_code'));
    }


    public function payment_withdrwan(AdminRepository $AdminRepository, $id)
    {

        $circle_id = base64_decode($id);
        $circle_round = CircleRound::find($circle_id);
        $circle = Circle::where('circle_code', $circle_round->circle_code)->first();
        $target_amount = $circle->target_achive;
        $round_amount  = $circle->round_set;
        $member_count  = $circle->no_of_member;
        $round_number  = $circle_round->round_no;
        $total_amount  = $member_count*$round_amount; 

        if($total_amount>=$target_amount)
        {
            $amount = $total_amount-$target_amount;

            $total = $total_amount+$amount;
        }
        else
        {   
              
            session()->flash('errors', 'Sorry, Your Total Round Amount is not Reach Target Amount; Please Try Next Round');
            return redirect()->route('circle.circle_detail', base64_encode($circle->id));
        
        }
        
    }
     

}
