<?php

namespace App\Http\Controllers\AdminPanel;

use App\Http\Controllers\Controller;
// use App\Services\CarWashClientService;
use Illuminate\Http\Request;
use App\Models\CarWashOwner;
use App\Models\CwoSubscription;
use Carbon\Carbon;
use Illuminate\Support\Facades\Hash;
use DB;
use Barryvdh\DomPDF\Facade\Pdf;

class AdminBillingController extends Controller
{
    public function __construct()
    {
    }

    public function index(Request $request)
    {
        $dataBag['chMenu'] = 'adminBillingList';
        $cwo_id = $request->input('cwo_id');

        $data = DB::table('invoice')
                    ->select('invoice.id', 'invoice.cwo_id', 'invoice.invoice_no', 'invoice.bill_date', 'invoice.due_date', 'invoice.amount', 'invoice.type', 'invoice.whatsapp_start_date', 'invoice.whatsapp_end_date', 'invoice.whatsapp_amount', 'invoice.total_amount', 'invoice.total_notifications_count', 'invoice.washed_completed_notifications_count', 'invoice.inqueue_notifications_count', 'invoice.is_whatsapp_paid', 'invoice.is_subscription_paid', 'cwo_master.cwo_name', 'cwo_master.cwo_company', 'cwo_master.cwo_email', 'cwo_master.cwo_isd', 'cwo_master.cwo_phone', 'cwo_master.account_no', 'cwo_master.created_at', 'cwo_master.cwo_subscription_id', 'invoice.is_paid')
                    ->join('cwo_master', 'cwo_master.id', '=', 'invoice.cwo_id')
                    ->where('invoice.is_paid',0)
                    ->orderBy('invoice.id', 'desc');
        if ($cwo_id != '') {
            $data->where('cwo_id', $cwo_id);
        }

        $dataCnt = $data->count();
        $data = $data->paginate(10);
        $dataBag['allRecords'] = $dataCnt;
        $dataBag['records'] = $data;
        // echo "<pre>";print_r($dataBag['records']->toArray());exit;
        $dataBag['cwo'] = CarWashOwner::where('is_active', 1)->orderBy('id', 'desc')->get();
        return view('billing.list', $dataBag);
    }

    public function downloadInvoice(Request $request){
       
        $data=[];
        $checkInvoice=DB::table('invoice')
        ->where('id', $request->invoice_id)->first();
        if(empty($request->invoice_id) || empty($checkInvoice)){
        abort(404);
        }
        // echo "<pre>";print_r($checkInvoice);exit;
        $pdf = PDF::loadView('billing.invoice_view', ['data'=>$checkInvoice]);
        $currentDate=date('d-m-Y');
        return $pdf->download("invoice{$request->invoice_id}_{$currentDate}.pdf");
    }

    public function  paidOffline(Request $request){
            // echo "billing offline";exit;
            $account_no = $request->input('account_no');
            $invoice_id = $request->input('invoice_id');
            $invoice_type = $request->input('invoice_type');
            echo $account_no . '->' . $invoice_id . '->' . $invoice_type . '<br>';

            $fetchInvoice=DB::table('invoice')->where('id',$invoice_id)->first();

            $is_subscription_paid = $fetchInvoice->is_subscription_paid;
            $is_whatsapp_paid = $fetchInvoice->is_whatsapp_paid;
            $is_paid = $fetchInvoice->is_paid;
            $cwo_id = $fetchInvoice->cwo_id;
            $generated_invoice_type = $fetchInvoice->type;
            $generated_invoice_subscription_amount = $fetchInvoice->amount;
            // echo $is_subscription_paid . '->' . $is_whatsapp_paid . '->' . $is_paid . '->' . $cwo_id;exit;
            $dt = Carbon::now(); 
            $item = CarWashOwner::findOrFail($cwo_id);

            if($invoice_type == 1) {
                $is_subscription_paid = 1;
                if($fetchInvoice->is_whatsapp_paid == 1){
                    $is_paid = 1;
                }
                // echo 'only subscription->' . $is_subscription_paid . '->' . $is_whatsapp_paid . '->' . $is_paid;exit;
                $start_date = \Carbon\Carbon::parse($fetchInvoice->due_date)->addDays(1)->format('Y-m-d');
                echo $start_date . '<br>';
                if($generated_invoice_type==1){
                    // $totalSubscriptionDaysCount=30;
                    $end_date = \Carbon\Carbon::parse($fetchInvoice->due_date)->addMonth()->format('Y-m-d');
                }
                if($generated_invoice_type==2){
                    // $totalSubscriptionDaysCount=365;
                    $end_date = \Carbon\Carbon::parse($fetchInvoice->due_date)->addYear()->format('Y-m-d');
                }
                if($generated_invoice_type==3){
                    // $totalSubscriptionDaysCount=90;
                    $end_date = \Carbon\Carbon::parse($fetchInvoice->due_date)->addDays(90)->format('Y-m-d');
                }
                echo $end_date;exit;

                $dataCwoSubscription = CwoSubscription::create([
                    'subscription_detail_id'=> 1,
                    'cwo_id'=> $cwo_id,
                    'start_date'=> $start_date,
                    'end_date'=> $end_date,
                    'type'=> $generated_invoice_type,
                    'amount'=> $generated_invoice_subscription_amount,
                    'status'=> 1,
                    'created_at'=>$dt->toDayDateTimeString(),
                    'updated_at'=>$dt->toDayDateTimeString()
                ]); 
                $cwo_subscription_id = $dataCwoSubscription->id;
                /*cwo_subscription ends*/
                $item->update([
                    'cwo_subscription_id'=> $cwo_subscription_id
                ]);
                $updateMaster=DB::table('invoice')
                                ->where('id', $invoice_id)
                                ->update([
                                    'is_subscription_paid' => $is_subscription_paid,
                                    'is_paid' => $is_paid,
                                    'paid_date' => date('d-m-Y')
                                ]);
                if($is_paid == 1) {
                    // $item = CarWashOwner::findOrFail($cwo_id);
                    $item->update([
                        'is_paid'=> 1,
                        'is_bill_generated'=> 0
                    ]);
                }                
            }

            if($invoice_type == 2) {
                $is_whatsapp_paid = 1;
                if($fetchInvoice->is_subscription_paid == 1){
                    $is_paid = 1;
                }
                // echo 'only whatsapp->' . $is_subscription_paid . '->' . $is_whatsapp_paid . '->' . $is_paid;exit;
                $updateMaster=DB::table('invoice')
                                ->where('id', $invoice_id)
                                ->update([
                                    'is_whatsapp_paid' => $is_whatsapp_paid,
                                    'is_paid' => $is_paid,
                                    'paid_date' => date('d-m-Y')
                                ]);
            }

            if($invoice_type == 3) {
                // echo "offline paid all";exit;
                $is_subscription_paid = 1;
                $is_whatsapp_paid = 1;
                $is_paid = 1;
                // echo 'both->' . $is_subscription_paid . '->' . $is_whatsapp_paid . '->' . $is_paid;exit;

                /*cwo_subscription starts*/
                // $cwomaster=DB::table('cwo_master')->select('cwo_subscription_id','start_date','end_date','account_no','id','allow_whatsapp_service','allow_whatsapp_inqueue','allow_whatsapp_completed')->where('id',$cwo_id)->first();
                // $cwoSubscriptions=DB::table('cwo_subscriptions')->where('id',$cwomaster->cwo_subscription_id)->first();
                // $cwoType=$cwoSubscriptions->type;
                if($fetchInvoice->is_subscription_paid == 0){
                    // echo "subscription  not paid";exit;
                    $start_date = \Carbon\Carbon::parse($fetchInvoice->due_date)->addDays(1)->format('Y-m-d');
                    // echo $start_date . '<br>';
                    if($generated_invoice_type==1){
                        // $totalSubscriptionDaysCount=30;
                        $end_date = \Carbon\Carbon::parse($fetchInvoice->due_date)->addMonth()->format('Y-m-d');
                    }
                    if($generated_invoice_type==2){
                        // $totalSubscriptionDaysCount=365;
                        $end_date = \Carbon\Carbon::parse($fetchInvoice->due_date)->addYear()->format('Y-m-d');
                    }
                    if($generated_invoice_type==3){
                        // $totalSubscriptionDaysCount=90;
                        $end_date = \Carbon\Carbon::parse($fetchInvoice->due_date)->addDays(90)->format('Y-m-d');
                    }
                    // echo $end_date;exit;

                    $dataCwoSubscription = CwoSubscription::create([
                        'subscription_detail_id'=> 1,
                        'cwo_id'=> $cwo_id,
                        'start_date'=> $start_date,
                        'end_date'=> $end_date,
                        'type'=> $generated_invoice_type,
                        'amount'=> $generated_invoice_subscription_amount,
                        'status'=> 1,
                        'created_at'=>$dt->toDayDateTimeString(),
                        'updated_at'=>$dt->toDayDateTimeString()
                    ]); 
                    $cwo_subscription_id = $dataCwoSubscription->id;
                    /*cwo_subscription ends*/
                    $item->update([
                        'cwo_subscription_id'=> $cwo_subscription_id,
                        'start_date'=> $start_date,
                        'end_date'=> $end_date
                    ]);
                    $updateMaster=DB::table('invoice')
                                    ->where('id', $invoice_id)
                                    ->update([
                                        'is_subscription_paid' => $is_subscription_paid,
                                        'is_whatsapp_paid' => $is_whatsapp_paid,
                                        'is_paid' => $is_paid,
                                        'paid_date' => date('d-m-Y')
                                    ]);
                    $item->update([
                        'is_paid'=> 1,
                        'is_bill_generated'=> 0
                    ]);                
                } else {
                    // echo "subscription paid, only whatsApp update";exit;
                    $updateMaster=DB::table('invoice')
                                    ->where('id', $invoice_id)
                                    ->update([
                                        // 'is_subscription_paid' => $is_subscription_paid,
                                        'is_whatsapp_paid' => $is_whatsapp_paid,
                                        'is_paid' => $is_paid,
                                        'paid_date' => date('d-m-Y')
                                    ]);
                    $item->update([
                        'is_paid'=> 1,
                        'is_bill_generated'=> 0
                    ]);   
                }
            }
            // exit;
            // $updateMaster=DB::table('invoice')
            //     ->where('id', $invoice_id)
            //     ->update([
            //         'is_subscription_paid' => $is_subscription_paid,
            //         'is_whatsapp_paid' => $is_whatsapp_paid,
            //         'is_paid' => $is_paid,
            //         'paid_date' => date('d-m-Y')
            //     ]);

            // if($is_paid == 1) {
            //     // $item = CarWashOwner::findOrFail($cwo_id);
            //     $item->update([
            //         'is_paid'=> 1,
            //         'is_bill_generated'=> 0
            //     ]);
            // }

            return redirect()->back()->with('msg', 'Updated Successfully.');    
        }


    
}
