<?php

namespace App\Http\Controllers;

use App\Models\Customer;
use App\Models\Invoice;
use App\Models\Sell;
use App\Models\Item;
use App\Models\Service;
use Exception;
use Illuminate\Http\Request;
use PDF;
use Illuminate\Support\Facades\Auth;

class InvoiceController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        //

        if (Auth::user()->type=='inventory') {
            $result=Invoice::where('manager_type','inventory')->paginate(10);
        }
        elseif (Auth::user()->type=='service') {
            $result=Invoice::where('manager_type','service')->paginate(10);
        }
        else $result = Invoice::paginate(10);
        return view('invoice.index', compact('result'));
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
        return view('invoice.create');
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //
        $count = count($request->product_name);
       // dd($request->all());

        $invoice = new Invoice;
        $invoice->cst = $request->cst;
        $invoice->service_id = $request->service_id;
        $invoice->manager_type = $request->manager_type;
        $invoice->car_model = $request->model;
        $invoice->car_chassic = $request->chassic;
        $invoice->car_year = $request->year;
        $invoice->car_number = $request->license;
        $invoice->car_klo = $request->klo;
        $invoice->tid = $request->tid;
        $invoice->invoicedate = $request->invoicedate;
        $invoice->notes = $request->notes;
        $invoice->total = $request->total;
        $invoice->commercial_text = $request->commercial_text;
        $invoice->super_total = $request->super_total;
        $invoice->paid = $request->paid;
        $invoice->balance = $request->balance;
        $invoice->save();
        $last_id = $invoice->id;


        for ($i = 0; $i < $count; $i++) {
            $result = new Sell;
            $result->invoiceid = $last_id;
            $result->cst = $request->cst;
            $result->service_id = $request->service_id;          
            $result->tid = $request->tid;
            $result->invoicedate = $request->invoicedate;
            $result->notes = $request->notes;
            $result->product_name = $request->product_name[$i];
            $result->product_qty = $request->product_qty[$i];
            $result->alert = $request->alert[$i];
            $result->product_price = $request->product_price[$i];
            $result->product_tax = $request->product_tax[$i];
            $result->product_discount = $request->product_discount[$i];
            $result->total_tax = $request->total_tax[$i];
            $result->total_discount = $request->total_discount[$i];
            $result->product_subtotal = $request->product_subtotal[$i];
            $result->product_id = $request->product_id[$i];
            $result->unit = $request->unit[$i];
            $result->unit_m = $request->unit_m[$i];
            $result->code = $request->code[$i];
            $result->serial = $request->serial[$i];
            // $result->term_id = $request->term_id[$i];
            $result->total = $request->total;

            $result->save();
        }

      return  redirect()->route('invoice.index')->with('success', 'Your message has been sent successfully!');
    }

    /**
     * Display the specified resource.
     *
     * @param  \App\Models\Invoice  $invoice
     * @return \Illuminate\Http\Response
     */
    public function show(Invoice $invoice)
    {
        //


    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\Models\Invoice  $invoice
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
     
         
        $invoice = Invoice::findorfail($id);  
        $result = Sell::where('invoiceid', $id)->get();
       
        if($invoice->service_id > '0'){
            
            $service=Service::findorfail($invoice->service_id);    
            $count1 = count($result);
            if ($count1 < 1) throw new Exception("No invoice Id in database");
            $arr_num = count($result);

            return view('invoice.edit', compact('result', 'invoice', 'arr_num','service'));

            }
            else{ 
                $count1 = count($result);
                if ($count1 < 1) throw new Exception("No invoice Id in database");
                $arr_num = count($result);

                return view('invoice.edit', compact('result', 'invoice', 'arr_num'));

                }



        return view('invoice.edit', compact('result', 'invoice', 'arr_num'));
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Models\Invoice  $invoice
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //
        //  dd($request->all());
        $count = count($request->product_name);

        $invoice = Invoice::find($id);
        $invoice->cst = $request->cst;
        $invoice->service_id = $request->service_id;
        $invoice->manager_type = $request->manager_type;
        $invoice->car_model = $request->model;
        $invoice->car_chassic = $request->chassic;
        $invoice->car_year = $request->year;
        $invoice->car_number = $request->license;
        $invoice->car_klo = $request->klo;
        $invoice->tid = $request->tid;
        $invoice->invoicedate = $request->invoicedate;
        $invoice->notes = $request->notes;
        $invoice->total = $request->total;
        $invoice->commercial_text = $request->commercial_text;
        $invoice->super_total = $request->super_total;
        $invoice->paid = $request->paid;
        $invoice->balance = $request->balance;
        $invoice->save();

        $invoice = Invoice::find($id);

        $result1 = Sell::where('invoiceid', $id)->get();

        foreach ($result1 as $i => $value) {

            $result = Sell::find($value->id);
            $result->cst = $request->cst;
            $result->service_id = $request->service_id;
            $result->tid = $request->tid;
            $result->invoicedate = $request->invoicedate;
            $result->notes = $request->notes;
            $result->product_name = $request->product_name[$i];
            $result->product_qty = $request->product_qty[$i];
            $result->alert = $request->alert[$i];
            $result->product_price = $request->product_price[$i];
            $result->product_tax = $request->product_tax[$i];
            $result->product_discount = $request->product_discount[$i];
            $result->total_tax = $request->total_tax[$i];
            $result->total_discount = $request->total_discount[$i];
            $result->product_subtotal = $request->product_subtotal[$i];
            $result->product_id = $request->product_id[$i];
            $result->unit = $request->unit[$i];
            $result->unit_m = $request->unit_m[$i];
            $result->code = $request->code[$i];
            $result->serial = $request->serial[$i];
            // $result->term_id = $request->term_id[$i];
            $result->total = $request->total;
            $result->save();
        }

        return  redirect()->route('invoice.index')->with('success', 'Update Successful!');

        //return $this->index();
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Models\Invoice  $invoice
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {

        try {
            $invoice = Sell::where('invoiceid', $id)->get();
            $count = count($invoice);
            if ($count < 1) throw new Exception("Something went wrong");

            foreach ($invoice as $value) {
                Sell::find($value->id)->delete();
            }
            Invoice::findorfail($id)->delete();  // delete invoice with id
        } catch (Exception $e) {

            return back()->withError($e->getMessage())->withInput();
        }

        return redirect()->back();
    }

    public function detail($id)
    {
 
       
        $invoice = Invoice::findorfail($id);  
        $result = Sell::where('invoiceid', $id)->get();
       
        if($invoice->service_id > '0'){
            
          //  $service=Service::find($invoice->service_id);  //  dd($service);
          $customer=Customer::find($invoice->service_id);  //  dd($customer);
            $count1 = count($result);
            if ($count1 < 1) throw new Exception("No invoice Id in database");
            $arr_num = count($result);

            return view('invoice.detail', compact('result', 'invoice', 'arr_num','customer'));

            }
            else{ 
                $count1 = count($result);
                if ($count1 < 1) throw new Exception("No invoice Id in database");
                $arr_num = count($result);

                return view('invoice.detail', compact('result', 'invoice', 'arr_num'));

                }



       // return view('invoice.detail', compact('result', 'invoice', 'arr_num','service'));
    }

    public function pdf($id)
    {

      //  dd($id);
        $invoice = Invoice::find($id);
        $result = Sell::where('invoiceid', $id)->orderByDesc('id')->get();

        if($invoice->service_id> '0'){
        $service=Service::findorfail($invoice->service_id);

        $count1 = count($result);
        if ($count1 < 1) throw new Exception("No invoice Id in database");
        $arr_num = count($result);
       // view()->share('invoice.detail', compact('result', 'invoice', 'arr_num','service'));

        $pdf = PDF::loadView('invoice.detail', compact('result', 'invoice', 'arr_num','service'));
        }
        else
        {
            $count1 = count($result);
            if ($count1 < 1) throw new Exception("No invoice Id in database");
            $arr_num = count($result);
           // view()->share('invoice.detail', compact('result', 'invoice', 'arr_num','service'));
            $pdf = PDF::loadView('invoice.detail', compact('result', 'invoice', 'arr_num'));
            }

        // download PDF file with download method
        return $pdf->download('pdf_file.pdf');
    }

    public function autocomplete(Request $request)
    {
        //dd($request->all());
        $data = Item::select("item_name")
            ->where('item_name', 'LIKE', '%' . $request->get('query') . '%')
            ->pluck("item_name");

        return response()->json($data);
    }

    public function customer_autocomplete(Request $request)
    {
        //dd($request->all());

        //get name and ph from services table
        // $value = Service::select("owner_name", "owner_ph")
        //     ->where('owner_name', 'LIKE', '%' . $request->get('query') . '%')
        //     ->get();

        // $data2 = Service::select("owner_name")
        //     ->where('owner_name', 'LIKE', '%' . $request->get('query') . '%')
        //     ->pluck('owner_name');

        //get name and ph from customer table
            $value = Customer::select("customer_name", "customer_phoneNo")
            ->where('customer_name', 'LIKE', '%' . $request->get('query') . '%')
            ->get();

            $data2 = Customer::select("customer_name")
            ->where('customer_name', 'LIKE', '%' . $request->get('query') . '%')
            ->pluck('customer_name');
        foreach ($value as $data) {
            $car[]= $data->owner_name . '/' . $data->owner_ph;
        }

        $data[0] = $data2;
        $data[1] = $car;



        //  $data=$data->owner_name.'/'.$data->owner_ph;
        //$dataModified[] = $data->FirstName .' '. $data->LastName;
        return response()->json($data);
    }

    public function customer_search(Request $request)
    {
        return "this is custoer search";

        if(Request::ajax()){
         return 'getReauest has loaded completely';
     }

        //return response()->json($data);
    }
}

