<?php

use App\Http\Controllers\AlumnoController;
use App\Http\Controllers\CeproController;
use App\Http\Controllers\HomeController;
use App\Http\Controllers\UgelController;
use App\Http\Controllers\UserController;
use App\Http\Controllers\AlumnoDniConsultaController;
use App\Http\Controllers\Auth\CustomLoginController; // ¡Importante!
use Illuminate\Support\Facades\Route;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Aquí es donde puedes registrar las rutas web para tu aplicación.
| Estas rutas son cargadas por el RouteServiceProvider dentro de un grupo
| que contiene el grupo de middleware "web". ¡Ahora crea algo grandioso!
|
*/

// *** RUTA DE REDIRECCIÓN PARA LARAVEL POR DEFECTO ***
// Este es un "seguro" para que si el middleware 'auth' por defecto busca 'login',
// lo encuentre y redirija a tu formulario personalizado.
Route::get('/login', function () {
    return redirect()->route('login.custom.form');
})->name('login');


// =======================================================================
// RUTAS DE AUTENTICACIÓN PERSONALIZADA (LOGIN / LOGOUT)
// =======================================================================
Route::controller(CustomLoginController::class)->group(function () {
    // Muestra el formulario de login. Solo accesible para usuarios NO autenticados.
    Route::get('/login-custom', 'showLoginForm')->name('login.custom.form')->middleware('guest');
    
    // Procesa el envío de credenciales para iniciar sesión.
    Route::post('/login-custom', 'login')->name('custom.login');
    
    // Ruta para cerrar sesión. Solo accesible para usuarios autenticados.
    Route::post('/logout-custom', 'logout')->name('custom.logout')->middleware('auth');
});

// =======================================================================
// RUTAS PROTEGIDAS POR AUTENTICACIÓN (REQUIERE LOGIN)
// Todas las rutas dentro de este grupo requerirán que el usuario esté logeado.
// Si un usuario no autenticado intenta acceder, será redirigido a '/login' (y luego a '/login-custom')
// =======================================================================
Route::middleware(['auth'])->group(function () {
    // Página principal / Dashboard para usuarios autenticados
    Route::get('/', [HomeController::class, 'index'])->name('home');
    Route::get('/home', [HomeController::class, 'index']); // Redundante, pero lo mantengo por si acaso


    // Rutas para la Consulta de Alumno por DNI
    Route::controller(AlumnoDniConsultaController::class)->group(function () {
        Route::get('/consulta-dni', 'showForm')->name('consulta.dni.form');
        Route::post('/consulta-dni/buscar', 'buscarDni')->name('consulta.dni.buscar');
    });

    // Rutas específicas para Alumnos (deben ir ANTES de Route::resource('alumnos'))
    Route::get('/alumnos/get/{alumno}', [AlumnoController::class, 'getAlumnoJson'])->name('alumnos.getJson');
    Route::get('/alumnos/search', [AlumnoController::class, 'search'])->name('alumnos.search');

    // Rutas CRUD para los recursos (protegidas por 'auth' del grupo)
    Route::resource('users', UserController::class);
    Route::resource('alumnos', AlumnoController::class);
    Route::resource('ugels', UgelController::class);
    Route::resource('cepros', CeproController::class);

    // Ejemplo de ruta protegida adicional
    Route::get('/dashboard', function () {
        return "¡Bienvenido al Dashboard! Solo usuarios logeados pueden ver esto.";
    })->name('dashboard');
});

// =======================================================================
// MIDDLEWARE PARA ROLES (ADMIN, ETC.)
// Si quieres proteger rutas para admins, primero debes estar autenticado
// y luego pasar este nuevo middleware.
// =======================================================================

// 1. Crea este middleware: php artisan make:middleware AdminMiddleware
// 2. Modifica el handle() en AdminMiddleware.php para comprobar $request->user()->isAdmin()
// 3. Registra el alias en app/Http/Kernel.php: 'admin' => \App\Http\Middleware\AdminMiddleware::class,
// 4. Luego puedes usarlo así:
// Route::middleware(['auth', 'admin'])->group(function () {
//     Route::get('/admin/dashboard', [AdminController::class, 'index'])->name('admin.dashboard');
// });