<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Calendarizacion;
use App\Encabezadopie;
use App\Exports\CalendarizacionExport;
use App\Periodos;
use Barryvdh\DomPDF\Facade\Pdf;
use Maatwebsite\Excel\Facades\Excel;
use PhpOffice\PhpSpreadsheet\Writer\Pdf\Dompdf;

class CalendarizacionesController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index(Request $request)
    {
        $data = $request->all();
        $calenda = "";
        if (count($data) > 0) {
            $calenda = Calendarizacion::where('status_caleneval', '1');
            if ($data['periodo'] != null) {
                $calenda = $calenda->whereHas('periodos', function ($query) use ($data) {
                    $query = $query->where('nombre', 'like', '%' . $data['periodo'] . '%');
                });
            }
            $calenda = $calenda->get();
        } else {
            $calenda = Calendarizacion::with('periodos')->where('status_caleneval', '1')->get();
        }

        return view('calendarizacion.listar', compact('calenda', 'data'));
    }

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

        $peri = Periodos::where('nombre', '>=', '2021')->get();
        return view('calendarizacion.nuevo', compact('peri'));
    }

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

        Calendarizacion::create(['id' => $data['periodo'], 'fechaIni_caleneval' => $data['fechaI'], 'fechaFin_caleneval' => $data['fechaF'], 'primerSeg_caleneval' => $data['primerS'], 'segundoSeg_caleneval' => $data['segundoS'], 'tercerSeg_caleneval' => $data['tercerS'], 'status_caleneval' => '1']);

        return response()->json(['estado' => 'Exito', 'mensaje' => 'Calendarización guardada con exito!']);
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        $calen = Calendarizacion::with('periodos')->where('cve_caleneval', $id)->first();
        return view('calendarizacion.consultar', compact('calen'));
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        $calen = Calendarizacion::with('periodos')->where('cve_caleneval', $id)->first();
        return view('calendarizacion.modificar', compact('calen'));
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        $cal = Calendarizacion::findOrFail($id);
        $cal->id = $request->periodo;
        $cal->fechaIni_caleneval = $request->fechaI;
        $cal->fechaFin_caleneval = $request->fechaF;
        $cal->primerSeg_caleneval = $request->primerS;
        $cal->segundoSeg_caleneval = $request->segundoS;
        $cal->tercerSeg_caleneval = $request->tercerS;
        $cal->save();
        return response()->json(['estado' => 'Exito', 'mensaje' => 'Calendarización actualizada con exito!']);
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        $calendarizacion = Calendarizacion::find($id);
        $calendarizacion->status_caleneval = '0';
        $calendarizacion->save();

        return response()->json(['estado' => 'Exito', 'mensaje' => 'Calendarización eliminada con exito!']);
    }

    public function exportExel(Request $request)
    {
        $data = $request->all();
        $periodo = $data['periodo'];
        if ($periodo == null) {
            $periodo = "";
        }

        return Excel::download(new CalendarizacionExport($periodo), 'calendarización.xlsx');
    }

    public function exportPdf(Request $request)
    {
        $enca = Encabezadopie::where('status_encpie', 1);
        $enca = $enca->max('cve_encpie');
        $enca = Encabezadopie::where('cve_encpie', $enca)->first();

        $data = $request->all();
        $periodo = $data['periodo'];
        $pdf = "";
        if ($periodo == null) {
            $periodo = "";
            $pdf = Pdf::loadView('calendarizacion.tablapdf', ['calenda' => Calendarizacion::where('status_caleneval', '1')->with('periodos')->get(), 'enca' => $enca]);
        } else {
            $calenda = Calendarizacion::where('status_caleneval', '1');
            $periodo = $this->periodo;
            $calenda = $calenda->whereHas('periodos', function ($query) use ($periodo) {
                $query = $query->where('nombre', 'like', '%' . $periodo . '%')->orderBy('nombre');
            });
            $calenda = $calenda->get();
            $pdf = Pdf::loadView('calendarizacion.tablapdf', ['calenda' => $calenda, 'enca' => $enca]);
        }

        return $pdf->download('calendarización.pdf');
    }
}
