<?php

namespace App\Http\Controllers;

use App\Vacaciones;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use App\Personal;
use Illuminate\Support\Facades\Auth;

class VacacionesController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        //
        if(Auth::user()->user_tipe == 'Admin' || Auth::user()->user_tipe == 'RRHH')
        {
            $datos = DB::table('vacaciones')
            ->join('personals', 'personals.id_personal', '=', 'vacaciones.id_personal')
            ->select(['vacaciones.id_vacacion',
            'personals.id_personal', 'personals.nombre', 'personals.apellidos',
            'vacaciones.dias_tomados', 'vacaciones.dias_descanso'])->paginate(20);
            return view('Vacaciones.index', compact('datos'));
        }
        else
        {
            abort(403, 'Prohibido el Acceso');
        }
    }

    public function search(Request $request)
    {
        if(Auth::user()->user_tipe == 'Admin' || Auth::user()->user_tipe == 'RRHH')
        {
            $search = trim($request->get('search'));

            $datos = DB::table('vacaciones')
            ->join('personals', 'personals.id_personal', '=', 'vacaciones.id_personal')
            ->select(['vacaciones.id_vacacion',
            'personals.id_personal', 'personals.nombre', 'personals.apellidos',
            'vacaciones.dias_tomados', 'vacaciones.dias_descanso'])
            ->where('personals.nombre', 'LIKE', '%'.$search.'%')
            ->orWhere('personals.apellidos', 'LIKE', '%'.$search.'%')
            ->orderBy('personals.id_personal')->paginate();

            $output = '';

            if(count($datos)>0)
            {
                $contador = 1;
                foreach($datos as $dato)
                {
                    $output .= '<tr style="text-align: center">
                                    <td>'.$contador.'</td>
                                    <td>'.$dato->nombre." ".$dato->apellidos.'</td>
                                    <td>'.$dato->dias_tomados.'</td>
                                    <td>'.$dato->dias_descanso.'</td>
                                    <td>
                                        <a href="Vacaciones/'.$dato->id_vacacion.'/edit" class="btn btn-warning">
                                            <span class="far fa-edit"></span> Editar</a>
                                    </td>
                                </tr>';
                    $contador = $contador + 1; 
                }
                return response($output);
            }
            else
            {
                $output .= '<tr><td colspan="5" style="text-align: center">¡Ups..! No Se Encontraron Resultados</td></tr>';
                return response($output);
            }
        }
        else
        {
            abort(403, 'Acceso Prohibido');
        }
    }

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

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //
    }

    /**
     * Display the specified resource.
     *
     * @param  \App\Vacaciones  $vacaciones
     * @return \Illuminate\Http\Response
     */
    public function show(Vacaciones $vacaciones)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\Vacaciones  $vacaciones
     * @return \Illuminate\Http\Response
     */
    public function edit($id_vacacion)
    {
        if(Auth::user()->user_tipe == 'Admin' || Auth::user()->user_tipe == 'RRHH')
        {
            $registro_vac = DB::table('vacaciones')
            ->join('personals', 'personals.id_personal', '=', 'vacaciones.id_personal')
            ->select(['vacaciones.id_vacacion',
            'personals.id_personal', 'personals.nombre', 'personals.apellidos', 'fecha_ingreso',
            'vacaciones.dias_tomados', 'vacaciones.dias_descanso'])
            ->where('vacaciones.id_vacacion', '=', $id_vacacion)
            ->get();

            foreach($registro_vac as $key=>$valor)
            {
                $idVacacion = $valor->id_vacacion;
                $idPersonal = $valor->id_personal;
                $nombreP = $valor->nombre;
                $apellidosP = $valor->apellidos;
                $fecha = $valor->fecha_ingreso;
                $diasT = $valor->dias_tomados;
                $diasD = $valor->dias_descanso;
            }

            //calcular vacaciones
            $fecha1 = date_create($fecha);
            $fecha2 = date_create();
            $intervalo = date_diff($fecha1, $fecha2);
            $conteo = $intervalo->format('%a');
            $vacaciones = 0;

            for($i=0; $i<=$conteo; $i++)
            {
                if($i %30 == 0)
                {
                    $vacaciones += 1.25;
                }
            }

            return view('Vacaciones.vacaciones', compact(
                [
                    'idVacacion',
                    'idPersonal', 'apellidosP',
                    'nombreP',
                    'diasT',
                    'diasD',
                    'conteo', 'vacaciones'
                ]));
        }
        else 
        {
            abort(403, 'Acceso Prohibido');
        }
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Vacaciones  $vacaciones
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $idVacacion)
    {
        $campos = [
            'dias_tomados' => 'required|numeric',
            'dias_descanso' => 'required'
        ];

        $Mensaje = ["required" => 'El Campo :attribute Es Requerido'];
        $this->validate($request, $campos, $Mensaje);

        $datosVacaciones = request()->except(['_token', '_method', 'id_personal', 'dias_t', 'dias_v']);
        Vacaciones::where('id_vacacion', '=', $idVacacion)->update($datosVacaciones);
        return redirect('Vacaciones')->with('Mensaje', 'Vacaciones del Personal han sido Modificadas Correctamente');
        //return response()->json($datosVacaciones);
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Vacaciones  $vacaciones
     * @return \Illuminate\Http\Response
     */
    public function destroy(Vacaciones $vacaciones)
    {
        //
    }
}
