<?php

namespace App\Http\Controllers\OwnerPanel;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\CarWashOwner;
use App\Models\OtherService;
use App\Models\WashDetail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Hash;
use Auth;
use DB;
use Illuminate\Validation\Rule;

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

    public function index(Request $request)
    {
        $cwo_id = Auth::user()->cwo_id;
        // echo $cwoid;exit;
        $dataBag['chMenu'] = '';
        $description = $request->input('description');
        $data = OtherService::with('cwoDetail')->where('cwo_id', $cwo_id)->where('is_active', '!=', 3)->orderBy('id', 'desc');
        if ($description != '') {
            $data = $data->where('description', 'like', '%' . $description . '%');
        }
        $dataCnt = $data->count();
        $data = $data->paginate(10);
        $dataBag['allRecords'] = $dataCnt;
        $dataBag['records'] = $data;
        // echo "<pre>";print_r($dataBag['records']->toArray());exit;
        return view('owner.otherservices.list', $dataBag);
    }


    /**
     * Show the form for creating a new resource.
     */
    public function create(Request $request)
    {
        $dataBag = array();
        $dataBag['chMenu'] = '';
        return view('owner.otherservices.create', $dataBag);
    }

    /**
     * Store a newly created resource in storage.
     */
    public function store(Request $request)
    {
        $cwo_id = Auth::user()->cwo_id;
        $request->validate([
            // 'wash_name' => 'required|unique:wash_categories,wash_name',
            'description' => 'required',
            'price' => 'required|numeric|nullable',
            // 'quantity' => 'numeric|nullable',
            'quantity' => [
                Rule::when($request->input('qty_in_stock_applicable') == 1, 'required')
            ],
            'is_active' => 'required'
        ], [
            'description.required' => 'Please enter product/service name.',
            'price.required' => 'Please enter price.',
            'price.numeric' => 'Price should be numeric.',
            'quantity.required' => 'Please enter quantity while quantity in stock is applicable.',
            'quantity.numeric' => 'Quantity should be numeric.',
            'is_active.required' => 'Please select a status.'
        ]);
        $description = $request->input('description');
        $price = $request->input('price');
        $qty_in_stock_applicable = $request->input('qty_in_stock_applicable');
        $quantity = $request->input('quantity');
        $is_active = $request->input('is_active');
        $dt = Carbon::now();
        if($qty_in_stock_applicable == 1) {
            $qty_in_stock_applicable = $qty_in_stock_applicable;
            $quantity = $quantity;
        } else {
            $qty_in_stock_applicable = 0;
            $quantity = NULL;
        }
        /*insert into other_services table starts*/
        $record = OtherService::create([
            'cwo_id' => $cwo_id,
            'description'=> $description,
            'price'=> $price,
            'qty_in_stock_applicable'=> $qty_in_stock_applicable,
            'quantity'=> $quantity,
            'is_active' => $is_active,
            'created_at' => $dt->toDayDateTimeString(),
            'updated_at' => $dt->toDayDateTimeString()
        ]);
        $other_service_id = $record->id;
        /*insert into other_services table ends*/

        return back()->with('success', 'Product/Service has been added successfully.')->with('msg_class', 'alert alert-success');
    }

    /**
     * Display the specified resource.
     */
    public function show(string $id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     */
    public function edit($id)
    {
        $dataBag = array();
        $dataBag['chMenu'] = '';
        $record = OtherService::findorfail($id);
        $dataBag['details'] = $record;
        return view('owner.otherservices.edit', $dataBag);
    }

    /**
     * Update the specified resource in storage.
     */
    public function update(Request $request, $id)
    {
        // echo $id;exit;
        $request->validate([
            // 'wash_name' => 'required|unique:wash_categories,wash_name',
            'description' => 'required',
            'price' => 'required|numeric|nullable',
            // 'quantity' => 'numeric|nullable',
            'quantity' => [
                Rule::when($request->input('qty_in_stock_applicable') == 1, 'required')
            ],
            'is_active' => 'required'
        ], [
            'description.required' => 'Please enter product/service name.',
            'price.required' => 'Please enter price.',
            'price.numeric' => 'Price should be numeric.',
            'quantity.required' => 'Please enter quantity while quantity in stock is applicable.',
            'quantity.numeric' => 'Quantity should be numeric.',
            'is_active.required' => 'Please select a status.'
        ]);
        $description = $request->input('description');
        $price = $request->input('price');
        $qty_in_stock_applicable = $request->input('qty_in_stock_applicable');
        $quantity = $request->input('quantity');
        $is_active = $request->input('is_active');
        $dt = Carbon::now();
        if($qty_in_stock_applicable == 1) {
            $qty_in_stock_applicable = $qty_in_stock_applicable;
            $quantity = $quantity;
        } else {
            $qty_in_stock_applicable = 0;
            $quantity = NULL;
        }
        /*update other_services table starts*/
        $data = OtherService::findOrFail($id);
        $record = $data->update([
            'description'=> $description,
            'price'=> $price,
            'qty_in_stock_applicable'=> $qty_in_stock_applicable,
            'quantity'=> $quantity,
            'is_active' => $is_active,
            'updated_at' => $dt->toDayDateTimeString()
        ]);
        /*update other_services table ends*/
        
        return back()->with('success', 'Product/Service has been updated successfully.')->with('msg_class', 'alert alert-success');
    }

    /**
     * Remove the specified resource from storage.
     */
    public function destroy(string $id)
    {
        //
    }

    public function delete($id)
    {
        /*$record_count = WashDetail::where('other_service_id', $id)->count();
        if ($record_count > 0) {
            if ($record_count > 1) {
                $data = 'washes';
            } else {
                $data = 'wash';
            }
            return back()->with('msg', 'This Product/Service is associated with ' . $record_count . ' ' . $data . '. You can not delete it.')->with('msg_class', 'alert alert-danger');
        } else {
            $record = OtherService::findorfail($id); // fetch the record
            $record->is_active = "3";
            $record->save();
            return back()->with('msg', 'The Product/Service has been deleted successfully.')
                ->with('msg_class', 'alert alert-success');
        }*/
        $record = OtherService::findorfail($id); // fetch the record
        $record->is_active = "3";
        $record->save();
        return back()->with('msg', 'The Product/Service has been deleted successfully.')
            ->with('msg_class', 'alert alert-success');
    }

    public function download(Request $request)
    {
        $cwo_id = Auth::user()->cwo_id;
        $fileName = 'other-services.csv';
        $description = $request->input('description');
        $data = OtherService::with('cwoDetail')->where('cwo_id', $cwo_id)->where('is_active', '!=', 3)->orderBy('id', 'desc');
        if ($description != '') {
            $data = $data->where('description', 'like', '%' . $description . '%');
        }

        $data = $data->get();

        $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#', 'Products/ServicesName', 'Quantity in Stock', 'Price', 'Status');

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

            $i = 1;
            foreach ($data as $d) {
                $row['sl_no'] = $i++;
                // if(Auth::user()->email != ''){
                //     $row['logged_in_user'] = Auth::user()->name . ' - ' . Auth::user()->email;
                // } else {
                //     $row['logged_in_user'] = Auth::user()->name;
                // }
                $row['description']  = $d->description;
                $row['quantity']  = $d->quantity;
                $row['price']  = $d->price;
                if ($d->cwoDetail->currencyDetail != '') {
                    $row['currency']  = $d->cwoDetail->currencyDetail->symbol;
                } else {
                    $row['currency'] = 'R';
                }
                if ($d->is_active == 1) {
                    $row['is_active']  = 'Active';
                } 
                if ($d->is_active == 0) {
                    $row['is_active']  = 'Inactive';
                } 

                fputcsv($file, array($row['sl_no'], $row['description'], $row['quantity'], $row['currency'].$row['price'], $row['is_active']));
            }

            fclose($file);
        };

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