<?php

namespace App\Http\Controllers;

use App\Comunas;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use PharIo\Manifest\RequiresElement;
use Illuminate\Support\Facades\DB;

class ComunasController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */

    public function index(Request $request)
    {
        if(Auth::user()->user_tipe == 'Admin' || Auth::user()->user_tipe == 'RRHH')
        {
            $txtsearch = trim($request->get('txtsearch'));
            $comunas = DB::table('comunas')->select('id_comuna', 'comuna', 'provincia', 'region', 'n_region')
            ->where('comuna', 'LIKE', '%'.$txtsearch.'%')
            ->orWhere('provincia', 'LIKE', '%'.$txtsearch.'%')
            ->orWhere('region', 'LIKE', '%'.$txtsearch.'%')
            ->orWhere('n_region', 'LIKE', '%'.$txtsearch.'%')
            ->orderBy('id_comuna', 'asc')
            ->paginate(30);
            
            return view('Comunas.index', compact(['comunas', 'txtsearch']));
        }
        else
        {
            abort(403, 'Acceso Prohibido');
        }
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        // esta funcion retorna el metodo de crear nueva comuna que es donde se añaden las comunas en la dir resources/views/comunas
        if(Auth::user()->user_tipe == 'Admin' || Auth::user()->user_tipe == 'RRHH')
        {
            return view('Comunas.create');
        }
        else
        {
            abort(403, 'Accesso Prohibido');
        }
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $campos = [
            'comuna' => 'required|string|max:100',
            'provincia' => 'required|string|max:100',
            'region' => 'required|string|max:100',
            'n_region' => 'required|numeric'
        ];

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

        //Este metodo llama todos los datos del furmulario para ser almacenados
        $datosComuna = request()->except('_token'); //recolecta la info infresada a excepcion del token o llave de acceso
        Comunas::insert($datosComuna); //inserta los datos a la DB
        return redirect('Comunas')->with('Mensaje', '¡Comuna Agreada con Éxito!');
    }

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

    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\Comunas  $comunas
     * @return \Illuminate\Http\Response
     */
    public function edit($id_comuna)
    {
        if(Auth::user()->user_tipe == 'Admin' || Auth::user()->user_tipe == 'RRHH')
        {
            //el metodo toma el id y en la variable comuna toma el valor del registro de comuna buscandolo con el id
            $comuna = Comunas::findOrFail($id_comuna);
            //retorna la vista del form de editar pasando como parametro el registro seleccionado
            return view('Comunas.edit', compact('comuna'));
        }
        else
        {
            abort(403, 'Acceso Prohibido');
        }
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Comunas  $comunas
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id_comuna)
    {
        $campos = [
            'comuna' => 'required|string|max:100',
            'provincia' => 'required|string|max:100',
            'region' => 'required|string|max:100',
            'n_region' => 'required|numeric'
        ];

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

        $datosComuna = request()->except(['_token', '_method']);
        Comunas::where('id_comuna', '=', $id_comuna)->update($datosComuna);
        /*$comuna = Comunas::findOrFail($id_comuna);
        return view('Comunas.edit', compact('comuna'));*/
        return redirect('Comunas')->with('Mensaje', '¡Comuna Editada con Éxito!');
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Comunas  $comunas
     * @return \Illuminate\Http\Response
     */
    public function destroy($id_comuna)
    {
        Comunas::destroy($id_comuna);
        return redirect('Comunas')->with('Mensaje', '¡Comuna Eliminada con Éxito!');
    }
}
