<?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('cwo_name', 'asc')->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.');    
    }

    public function download(Request $request)
    {
        // echo "download";exit;
        $fileName = 'client-bills.csv';

        $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);
        }

        $data = $data->get();
        // print_r($data);exit;

        $headers = array(
            "Content-type"        => "text/csv",
            "Content-Disposition" => "attachment; filename=$fileName",
            "Pragma"              => "no-cache",
            "Cache-Control"       => "must-revalidate, post-check=0, pre-check=0",
            "Expires"             => "0"
        );

        $columns = array('Sl No.', 'Invoice No', 'CWO Name', 'Contact Number', 'Email Address', 'Signed Up Date', 'Subscription Package', 'WhatsApp Settings', 'Payment Status', 'Subscription Amount', 'WhatsApp Charges', 'Total Amount', 'Bill Date', 'Due Date');

        $callback = function () use ($data, $columns) {
            $file = fopen('php://output', 'w');
            fputcsv($file, $columns);

            $i = 1;
            foreach ($data as $d) {
                $row['invoice_no']  = $d->invoice_no;
                $row['cwo_company']  = $d->cwo_company;
                if($d->cwo_phone != '') {
                    $row['cwo_phone'] = '+' . $d->cwo_isd . $d->cwo_phone;
                } else {
                    $row['cwo_phone'] = '';
                }
                $row['cwo_email']  = $d->cwo_email;
                $row['signed_up_date']  = date("d-m-Y", strtotime($d->created_at));
                if($d->type == 1) {
                    $row['type'] = 'Monthly';
                }
                if($d->type == 2) {
                    $row['type'] = 'Yearly';
                }
                if($d->type == 3) {
                    $row['type'] = 'Quarterly';
                }
                if($d->type == 0) {
                    if($d->cwo_subscription_id == 0){
                        $row['type'] = 'Custom';    
                    } else {
                        $row['type'] = getCwoSubscription($d->cwo_subscription_id);
                    }
                }
                $row['whatsapp_settings']  = getWhatsAppSettings($d->cwo_id);
                $row['payment_status'] = '';
                if($d->is_paid == 1) {
                    $row['payment_status']  = 'Paid';
                } else {
                    if($d->is_subscription_paid == 1){
                        $row['payment_status']  .= 'Subscription Paid,';
                    }
                    if($d->is_subscription_paid == 0){
                        $row['payment_status']  .= 'Subscription Not Paid,';
                    }
                    if($d->is_whatsapp_paid == 1){
                        $row['payment_status']  .= 'WhatsApp Paid,';
                    }
                    if($d->is_whatsapp_paid == 0){
                        $row['payment_status']  .= 'WhatsApp Not Paid';
                    }
                }
                $row['amount']  = 'R' . $d->amount;
                $row['whatsapp_amount']  = 'R' . $d->whatsapp_amount;
                $row['total_amount']  = 'R' . $d->total_amount;
                if($d->bill_date != '') {
                    $row['bill_date'] = date("Y/m/d", strtotime($d->bill_date));
                } else {
                    $row['bill_date'] = '';
                }
                if($d->due_date != '') {
                    $row['due_date'] = date("Y/m/d", strtotime($d->due_date));
                } else {
                    $row['due_date'] = '';
                }
                fputcsv($file, array($i++, $row['invoice_no'], $row['cwo_company'], $row['cwo_phone'], $row['cwo_email'], $row['signed_up_date'], $row['type'], $row['whatsapp_settings'], $row['payment_status'], $row['amount'], $row['whatsapp_amount'], $row['total_amount'], $row['bill_date'], $row['due_date']));
            }

            fclose($file);
        };

        return response()->stream($callback, 200, $headers);
    }    


    
}
