<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;   // Para la lógica de autenticación
use Illuminate\Support\Facades\Hash;   // Para verificar contraseñas
use App\Models\User;                   // Tu modelo User

class CustomLoginController extends Controller
{
    /**
     * Muestra el formulario de login personalizado.
     *
     * @return \Illuminate\View\View
     */
    public function showLoginForm()
    {
        // Si el usuario ya está autenticado, lo redirigimos al panel principal
        if (Auth::check()) {
            return redirect()->route('home'); // Cambia 'home' a la ruta de tu panel principal
        }
        return view('auth.login'); // Tu vista de login (crearemos esta si no la tienes)
    }

    /**
     * Procesa la solicitud de login.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\RedirectResponse
     */
    public function login(Request $request)
    {
        // 1. Validar las credenciales enviadas por el usuario
        $request->validate([
            // Permitimos iniciar sesión con 'alias' o 'email'
            'alias_or_email' => 'required|string', 
            'password' => 'required|string',
        ], [
            'alias_or_email.required' => 'El alias o correo electrónico es obligatorio.',
            'password.required' => 'La contraseña es obligatoria.',
        ]);

        // 2. Intentar encontrar al usuario por 'alias' o 'email'
        $user = User::where('alias', $request->alias_or_email)
                    ->orWhere('email', $request->alias_or_email)
                    ->first();

        // 3. Verificar si el usuario existe y si la contraseña proporcionada coincide
        //    con la contraseña hasheada almacenada en la base de datos (pass_hash).
        if ($user && Hash::check($request->password, $user->pass_hash)) {
            // 4. Si las credenciales son correctas, iniciar sesión para el usuario.
            //    El segundo parámetro (false en este caso, o $request->has('remember'))
            //    maneja la funcionalidad "Recordarme".
            Auth::login($user); 

            // 5. Regenerar la sesión para prevenir ataques de fijación de sesión.
            $request->session()->regenerate();

            // 6. Redirigir al usuario a la URL a la que intentaba acceder (si existía)
            //    o a una ruta por defecto (ej. 'home').
            return redirect()->intended(route('home'))->with('status', '¡Has iniciado sesión exitosamente!'); 
        }

        // 7. Si las credenciales son incorrectas, redirigir de nuevo al formulario de login
        //    con los datos de entrada y un mensaje de error.
        return back()->withInput($request->only('alias_or_email'))->with('error', 'Credenciales inválidas. Por favor, verifica tu alias/email y contraseña.');
    }

    /**
     * Cierra la sesión del usuario.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\RedirectResponse
     */
    public function logout(Request $request)
    {
        // Cierra la sesión de autenticación de Laravel.
        Auth::logout(); 

        // Invalida la sesión actual del usuario. Esto destruye todos los datos de la sesión.
        $request->session()->invalidate();

        // Regenera el token CSRF para la siguiente solicitud, por seguridad.
        $request->session()->regenerateToken();

        // Redirige al usuario a la página de login con un mensaje de éxito.
        return redirect()->route('login.custom.form')->with('status', 'Has cerrado sesión correctamente.');
    }
}