<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
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\CircleDepositPayment;
use App\Repositories\SiteSettingsRepository;
use App\Repositories\CircleUserRepository;
use App\Repositories\CircleRoundPaymentRepository;
use App\Repositories\Auth\UserDeviceTokenRepository;
use App\Models\CircleUser;
use App\Models\CircleRound;
use App\Models\Circle;
use App\Models\SiteSettings;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Mail;
use Auth;
use Image;
use File;

class SuspendedController extends Controller {

    protected $userDeviceTokenRepository;

    public function __construct(SiteSettingsRepository $siteSettingsRepository, UserDeviceTokenRepository $userDeviceTokenRepository, AdminRepository $AdminRepository, CircleUserRepository $circleUserRepository, CircleRoundPaymentRepository $circleRoundPaymentRepository)
    {
        $this->siteSettingsRepository = $siteSettingsRepository;
        $this->userDeviceTokenRepository = $userDeviceTokenRepository;
        $this->dart_email = $AdminRepository->email_to();
        $this->circleUserRepository = $circleUserRepository;
        $this->circleRoundPaymentRepository = $circleRoundPaymentRepository;
    }

    public function index(AdminRepository $CircleRepository) 
    {
        $circle = Circle::select('*')
                        ->whereIn('status', [3,4,6])
                        ->orderBy('updated_at', 'desc')
                        ->get();

        foreach ($circle as $key => $value) {
            $payment = CircleRoundPayment::where('circle_code', $value->circle_code)->where('payment_type', 2)->get();
            $count = count($payment);
            $circle[$key]->count = $count;
            $circleUser = CircleUser::where('circle_code', $value->circle_code)->where('accept_status', 2)->get();
            $usercount = count($circleUser);
            $circle[$key]->usercount = $usercount;
            
        }
        // dd($circle);
        // dd($this->dart_email[4]['value']);
       return view('admin.pages.suspended.list', compact('circle'));
    }

    public function settlement(AdminRepository $AdminRepository, $id)
    {
        $id = base64_decode($id);
        $this->circleUserRepository->updateByCondition(array('id'=>$id), array('settle_status'=>1));
        $details = $this->circleUserRepository->findByCondition(array('id'=>$id));
        if(count($details)>0){
            $allUserSettled = $this->circleUserRepository->findByCondition(array('circle_code'=>$details[0]->circle_code, 'settle_status'=>1));
            $circleModel = new Circle;
            $circle = $circleModel->where('circle_code', $details[0]->circle_code)->first();
            if($circle->no_of_member == count($allUserSettled)){
                $circle->where('circle_code', $details[0]->circle_code)->update(['status'=>6]);
            }
            
            $userModel = new User;
            $user = $userModel->where('mobile_number', $details[0]->mobile_number)->first();
            //echo $details[0]->circle_code.'='.$details[0]->id;die;
            CircleDepositPayment::where(['circle_code'=>$details[0]->circle_code, 'circle_user_id'=>$details[0]->id])->update(['payment_type'=>3]);
            if($user){
                /***********************email********************/
                $to = $user->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>'.__('messages.all_mail_before_name').' <span style="">'.$user->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>'.__('messages.settlement_for_suspended_circle_approved_by_admin_mail_body_para2').' '.$details[0]->circle_code.'</p>
                                       <p>'.__('messages.settlement_for_suspended_circle_approved_by_admin_mail_body_para1').'</p>
                                       
                                    </td>
                                </tr>
                                <tr>
                                    <td style="font-family: sans-serif; color: #333; padding: 0px 10px 40px; font-size: 16px; line-height: 30px;">
                                       <p>'.__('messages.all_mail_footer_para2').'</p>
                                        <p>'.__('messages.all_mail_footer_para3').'</p>
                                    </td>
                                </tr>';
                        //echo $email_text; die;
                $data['email_text'] = $email_text;    
                Mail::send('mail.email_template', $data, function($message) use ($to)
                {
                    $message->from($this->dart_email[4]['value'], 'DANT');
                    $message->to($to);
                    $message->subject(__('messages.settlement_for_suspended_circle_approved_by_admin_mail_subject'));
                });
                /***************************email********************/

                /****************notification**********************/
                $userDevice = $this->userDeviceTokenRepository->findByCondition(array('user_id'=>$details[0]->user_id));
                // dd($userDevice);
                if($userDevice->count()>0)
                {
                    $content = array(
                    "en" => 'Hi '.$user->first_name.', for circle('.$details[0]->circle_code.'), your settlement is approved by admin, please check.');

                    $notify_response = $this->siteSettingsRepository->notification($userDevice[0]->device_tokens, $details[0]->circle_code, $content);
                }
                /****************notification**********************/
            }
            
        }
        session()->flash('success', 'Settlement Status Changed Successfully');
        return redirect()->route('circle.suspendedDetails', base64_encode($circle->id));
    }

    public function details(AdminRepository $AdminRepository, $id)
    {
        $circle_id = base64_decode($id);
        $table = new CircleRound;
        $circle = Circle::find($circle_id);
        $circle_code = $circle->circle_code;
        $circle_deposit = $circle->round_set;
        $circles = $this->circleUserRepository->findByCondition(array('circle_code'=>$circle_code));
        if($circles){
            foreach ($circles as $key => $value) {
                $value->username = str_replace('(Admin)', '', $value->username);
                
                /********************************Report for Suspend screen*********************************/             
                $total_paid = 0;
                $total_refund = 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;
                }
                $totalRefundDetails = $this->circleRoundPaymentRepository->findByCondition(array('circle_code'=>$circle_code, 'circle_user_id'=>$value->id,'payment_type'=>3,'trn_status'=>1));
                if(count($totalRefundDetails)){
                    $total_refund = $totalRefundDetails[0]['amount'];
                }
                $value->totalPaymentDetails = $total_paid + $total_refund;
                $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;
                }

                $refundDetails = $this->circleRoundPaymentRepository->findByCondition(array('circle_code'=>$circle_code, 'circle_user_id'=>$value->id,'payment_type'=>3));
                if($refundDetails->count()>0){
                    $output['refund_status'] = 1;
                }

                $depositDetails = CircleDepositPayment::where(['circle_code'=>$circle_code, 'circle_user_id'=>$value->id,'trn_status'=>1])->whereIn('payment_type',[1,3])->first();
                if($depositDetails){
                    $value->deposit = $depositDetails->amount;
                } else {
                    $value->deposit = 0;
                }

                $value->balance = 0;
                $value->balance = ($value->totalPaymentDetails - $value->withdrawDetails);
                /********************************Report for Suspend screen*********************************/

            }
        }
        // dd($circles);

        return view('admin.pages.suspended.details', compact('circle_code', 'circles','circle_deposit'));
    }
}
