<?php

namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use App\Exports\UsuariosExport;
use Maatwebsite\Excel\Facades\Excel;
use PDF; // Asegúrate de incluir la clase PDF
use App\Models\Puesto;

class usuariosController extends Controller
{
    /**
     * Display a listing of the resource.
     */
    public function index(Request $request)
    {
        $busqueda = $request->busqueda;

        if ($busqueda) {
            // Busca en la columna 'name' de la tabla 'users'
            $usuarios = User::where('name', 'LIKE', "%{$busqueda}%")->where('eliminado', 0)->get();

            if ($usuarios->isEmpty()) {
                return redirect()->route('usuarios')
                    ->with('error', 'No existe ningún usuario con el nombre "' . $busqueda . '". Por favor, inténtalo de nuevo.');
            }
        } else {
            // Si no hay búsqueda, mostrar todos los usuarios
            $usuarios = User::where('eliminado', 0)->get();
        }

        return view('usuarios', ['usuarios' => $usuarios]);
    }

    /**
     * Show the form for creating a new resource.
     */
    public function create()
    {
        $puestos = Puesto::all();
        return view('usuariosCrearEditar', ['usuario' => null, 'puestos' => $puestos]);
    }


    /**
     * Store a newly created resource in storage.
     */
    public function store(Request $request)
    {
        // Validación de datos
        $request->validate([
            'name' => 'required|string|max:255',
            'email' => 'required|string|email|max:255|unique:users',
            'apellido' => 'required|string|max:255',
            'puesto_id' => 'required|exists:puestos,id',
            'carrera' => 'required|string|max:255',
            'telefono' => 'required|string|max:255',
            'password' => 'required|string|min:8|confirmed',
        ]);

        // Si la validación pasa, crea el usuario
        $usuario = new User();
        $usuario->name = $request->name;
        $usuario->email = $request->email;
        $usuario->apellido = $request->apellido;
        $usuario->puesto_id = $request->puesto_id;
        $usuario->carrera = $request->carrera;
        $usuario->telefono = $request->telefono;
        $usuario->password = bcrypt($request->password);
        $usuario->save();

        return redirect()->route('usuarios')->with('success', 'Usuario creado exitosamente.');
    }

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

    /**
     * Show the form for editing the specified resource.
     */
  // ... existing code ...
  public function edit($id)
    {
        $user = User::findOrFail($id);
        $puestos = Puesto::all();
        return view('usuariosCrearEditar',['usuario' => $user, 'puestos' => $puestos]); // Asegúrate de que la clave sea 'usuario'
    }
// ... existing code ...


    /**
     * Update the specified resource in storage.
     */
    public function update(Request $request, $id)
    {
        // Validación de datos
        $request->validate([
            'name' => 'required|string|max:255',
            'email' => 'required|string|email|max:255',
            'apellido' => 'required|string|max:255',
            //'puesto_id' => 'required|exists:puesto_id',
            'carrera' => 'required|string|max:255',
            'telefono' => 'required|string|max:255',
            'password' => 'nullable|string|min:8|confirmed',
        ]);

        // Actualizar usuario
        $usuario = User::findOrFail($id);
        $usuario->name = $request->name;
        $usuario->email = $request->email;
        $usuario->apellido = $request->apellido;
        $usuario->puesto_id = $request->puesto_id;
        $usuario->carrera = $request->carrera;
        $usuario->telefono = $request->telefono;

        if ($request->filled('password')) {
            $usuario->password = bcrypt($request->password);
        }

        $usuario->save();

        return redirect()->route('usuarios')->with('success', 'Usuario actualizado exitosamente.');
    }

    /**
     * Remove the specified resource from storage.
     */

     public function destroy($id)
    {
        // Buscar el usuario por ID
        $usuario = User::findOrFail($id);

        // Cambiar el estado de eliminado a 1
        $usuario->eliminado = 1; // Asumiendo que 'eliminado' es el campo que indica el estado
        $usuario->save(); // Guardar los cambios

        // Redirigir a la lista de usuarios con un mensaje de éxito
        return redirect()->route('usuarios')->with('success', 'Usuario eliminado exitosamente.');
    }

    public function exportExcel()
    {
        return Excel::download(new UsuariosExport, 'usuarios.xlsx');
    }

    public function exportPDF()
    {
        $usuarios = User::where('eliminado', 0)->get();

        $pdf = PDF::loadView('exports.usuarios-pdf', ['usuarios' => $usuarios]);

        return $pdf->download('usuarios.pdf');
    }
}