<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use \App\Models\{Presupuesto, PresupuestoDetalle, PresupuestoDetallePlano };
//use Barryvdh\DomPDF\Facade as PDF;
use Barryvdh\DomPDF\Facade\Pdf;


class PresupuestosController extends Controller
{

    public function index()
    {
        $data = (new Presupuesto)->with('cliente')->with('detalle')->get();

        return $data;
    }

    public function create()
    { }

    public function store(Request $request)
    {
        if (! $request->cliente_id) {
            return ['status' => 'error', 'message' => 'Debe seleccionar el cliente!'];
        }

        if (!$request->items) {
            return ['status' => 'error', 'message' => 'Debe indicar los productos del presupuesto!'];
        }

        $presupuesto = Presupuesto::create($request->all());
        
        $this->saveBudgetDetails($presupuesto, $request->items);        

        return ['status' => 'success', 'presupuesto' => $presupuesto];
    }

    public function approveBudget(Request $request)
    {
        if (! $request->id) {
            return ['status' => 'error', 'message' => 'Debe indicar el Número de Presupuesto y seleccionar el cliente!'];
        }

        $budget = (new Presupuesto)->approveBudget($request->id);
        if ($budget) {
            return ['status' => 'success', 'presupuesto' => $budget];
        }
        return ['status' => 'error', 'message' => 'Intente nuevamente'];
    }

    public function show($id)
    {
        $presupuesto = Presupuesto::with('cliente')->find($id);

        return $presupuesto;
    }

    public function edit($id)
    { 
        $data = (new Presupuesto)->with('cliente')->with('detalle')->find($id);

        return $data;
    }

    private function saveBudgetDetails ($presupuesto, $data)
    {
        $detalle = new PresupuestoDetalle();
        $detalle_planos = new PresupuestoDetallePlano();
        $detalles = $detalle->where('presupuesto_id', $presupuesto->id)->get();
        foreach ($detalles as $delitem) {
            $detalle_planos->where('presupuesto_detalle_id', $delitem->id)->delete();            
        }
        $detalle->where('presupuesto_id', $presupuesto->id)->delete();
        foreach ($data as $item) {
            if ($item['id'] && $item['costo'] && $item['cantidad']) {
                $tax = isset($item['tax']) ? $item['tax'] : 0;
                $mallas = isset($item['mallas']) ? $item['mallas'] : 0;
                $diametro_interior = isset($item['diametro_interior']) ? $item['diametro_interior'] : 0;
                $diametro_exterior = isset($item['diametro_exterior']) ? $item['diametro_exterior'] : 0;
                $plisas_x_pl = isset($item['plisas_x_pl']) ? $item['plisas_x_pl'] : 0;
                $currency = isset($item['currency']) ? $item['currency'] : 'USD';
                $new = $detalle->create([
                    'presupuesto_id' => $presupuesto->id,
                    'producto_id' => $item['id'],
                    'price' => $item['costo'],
                    'quantity' => $item['cantidad'],
                    'alto' => $item['alto'],
                    'ancho' => $item['ancho'],
                    'espesor' => $item['espesor'],
                    'plisas' => $item['plisas'],
                    'plisas_x_pl' => $plisas_x_pl,
                    'calidad_id' => $item['calidad_id'],
                    'material_id' => $item['material_id'],
                    'mallas' => $mallas,
                    'diametro_interior' => $diametro_interior,
                    'diametro_exterior' => $diametro_exterior,
                    'tax' => $tax,
                    'discount' => $item['descuento'],
                    'details' => $item['details'],
                    'total' => $item['importe'],
                    'currency' => $currency
                ]);

                if (isset($item['planos'])) {
                    foreach ($item['planos'] as $subitem) {
                        $detalle_planos->create([
                            'presupuesto_detalle_id' => $new->id,
                            'plano_id' => $subitem['id']
                        ]); 
                    } 
                }
            }
        }
    }

    public function update(Request $request, $id)
    {
        $presupuesto = (new Presupuesto)->find($id);
        if (! $request->document_number || ! $request->cliente_id) {
            return ['status' => 'error', 'message' => 'Debe indicar el Número de Presupuesto y seleccionar el cliente!'];
        }

        $presupuesto->fill($request->all())->save();

        if ($request->items) {
            $this->saveBudgetDetails($presupuesto, $request->items);
        }        

        return ['status' => 'success', 'presupuesto' => $presupuesto];
    }

    public function destroy($id)
    {
        $presupuesto = Presupuesto::find($id);
        $presupuesto->delete();

        $details = (new PresupuestoDetalle)->where('presupuesto_id', $id)->delete();
        
        return ['status' => 'success', 'data' => $presupuesto];
    }

    public function printBudget(Request $request)
    { 
        $item = (new Presupuesto)->with('cliente')->with('detalle')->find($request->id);
        $pdf = PDF::loadView('pdfs.presupuesto',compact('item'))->setPaper('letter', 'portrait');
        return $pdf->stream('presupuesto.pdf');
        //return $pdf->output();
    }
}
