<?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\RoundPaymentUser;
use App\Models\CircleUser;
use App\Models\CircleRoundPayment;
use App\Models\CircleRound;
use App\Repositories\SiteSettingsRepository;
use App\Repositories\Auth\UserDeviceTokenRepository;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Mail;
use Auth;

class PaymentController extends Controller {

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

    public function index() 
    {
        $users = DB::select(DB::raw("select circles.id as circle_id, round_payment_users.*, a.id userid, a.email user_email, a.iban, b.first_name, b.last_name,a.document_validated from round_payment_users left join users a on a.mobile_number = round_payment_users.mobile left join users b on b.id = round_payment_users.transfered_by join circles on circles.circle_code = round_payment_users.circle_code where circles.status in (1, 5) order by round_payment_users.created_at DESC"));
        //dd($users);
        return view('admin.pages.payment.list', compact('users'));
    }

    public function status(AdminRepository $AdminRepository, $id)
    {
        $round_payment_user_id = base64_decode($id);
        $data = RoundPaymentUser::find($round_payment_user_id);
        if($data->round_no == 0){
            $paidUser = User::where('mobile_number', $data->mobile)->first();
            RoundPaymentUser::where(['id'=>$round_payment_user_id])->update(['status'=>1,'transfered_date'=>date('Y-m-d'),'transfered_by'=>Auth::guard('admin')->user()->id]);
            if($paidUser) {
                /*************email********************/
                $to = $paidUser->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="">'.$paidUser->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.leftover_payment_accepted_and_paid_by_admin_mail_body_para1').' '.$data->circle_code.'</p>
                                       <p>'.__('messages.leftover_payment_accepted_and_paid_by_admin_mail_body_para2').' '.$data->amount.'</p>
                                       <p>'.__('messages.leftover_payment_accepted_and_paid_by_admin_mail_body_para3').'</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;
                $datas['email_text'] = $email_text;    
                Mail::send('mail.email_template', $datas, function($message) use ($to)
                {
                    $message->from($this->dart_email[4]['value'], 'DANT');
                    $message->to($to);
                    $message->subject(__('messages.leftover_payment_accepted_and_paid_by_admin_mail_subject'));
                });
                /*************email********************/
            }
        } else {
            $circleRoundDetails = CircleRound::where(['circle_code'=>$data->circle_code, 'round_no'=>$data->round_no])->first();
            $userExist = CircleRoundPayment::where('circle_code', $data->circle_code)
                                      ->where('payment_type', 2)
                                      ->where('circle_user_id', $data->circle_user_id)
                                      ->count();
            $paidUser = User::where('mobile_number', $data->mobile)->first();
            if($userExist==0){
                RoundPaymentUser::where(['id'=>$round_payment_user_id])->update(['status'=>1,'transfered_date'=>date('Y-m-d'),'transfered_by'=>Auth::guard('admin')->user()->id]);
                $instCircleArr = array(
                                    'circle_code'=>$data->circle_code,
                                    'circle_user_id'=>$data->circle_user_id,
                                    'round_id'=>$circleRoundDetails->id,
                                    'trn_id'=>'withdrawal-'.rand(0,1000),
                                    'trn_status'=>1,
                                    'amount'=>$data->amount,
                                    'payment_mode'=>1,
                                    'payment_type'=>2,
                                );
                $instCircle = CircleRoundPayment::create($instCircleArr);
                $all_circle_user = CircleUser::where('circle_code', $data->circle_code)->get();
                foreach ($all_circle_user as $key => $value) 
                {
                    $all_user = User::where('mobile_number', $value->mobile_number)->first();
                    /****************notification**********************/
                    $userDevice = $this->userDeviceTokenRepository->findByCondition(array('user_id'=>$all_user->id));
                    // dd($userDevice);
                    if($userDevice->count()>0)
                    {
                        $content = array(
                        "en" => $paidUser->first_name.' paid by Admin in this circle ('.$value->circle_code.').');
                        $notify_response = $this->siteSettingsRepository->notification($userDevice[0]->device_tokens, $value->circle_code, $content);
                    }
                /****************notification**********************/
                }
                session()->flash('success', 'Round payment send to user '.$paidUser->username);
            } else {
                session()->flash('errors', 'Sorry, Your Total Round Amount is not Reach Target Amount; Please Try Next Round');
            } 
            if($paidUser) {
                /*************email********************/
                $to = $paidUser->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="">'.$paidUser->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.pay_target_amount_by_admin_mail_body_para1').' '.$data->circle_code.'</p>
                                       <p><b>'.__('messages.pay_target_amount_by_admin_mail_body_para2').'</b></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;
                $datas['email_text'] = $email_text;    
                Mail::send('mail.email_template', $datas, function($message) use ($to)
                {
                    $message->from($this->dart_email[4]['value'], 'DANT');
                    $message->to($to);
                    $message->subject(__('messages.pay_target_amount_by_admin_mail_subject'));
                });
                /*************email********************/
            }
        }
        return redirect()->route('admin.payment.list');
    }
}
