<?php

use Illuminate\Support\Facades\Route;

use App\Models\Course;

use App\Http\Controllers\Admin\DashboardController;
use App\Http\Controllers\Admin\UserController;
use App\Http\Controllers\Admin\CourseController;
use App\Http\Controllers\Admin\CourseTypeController;
use App\Http\Controllers\Admin\CourseContentController;

use App\Http\Controllers\Payment\FlowPaymentController;

use App\Http\Controllers\CheckoutController;
use App\Http\Controllers\ClassroomController;
use App\Http\Controllers\ContentStreamController;


Route::get('/', function () {
    // Obtenemos solo los cursos publicados, cargando su relación para mejor rendimiento
    $courses = Course::with('type')->where('status', 'published')->latest()->take(6)->get();
    
    return view('welcome', compact('courses'));
});

Auth::routes();

Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home');

Route::middleware(['auth', 'role:superadmin|admin'])
    ->prefix('admin')
    ->name('admin.')
    ->group(function () {
        
        // Y aquí ->name('dashboard')
        Route::get('/dashboard', [DashboardController::class, 'index'])->name('dashboard');

        // CRUD de Cursos accesible por Admin y Superadmin
        Route::resource('courses', CourseController::class);

        // CRUD de Tipos de Cursos (Solo Superadmin puede gestionar la configuración estructural)
        Route::middleware(['role:superadmin'])->resource('course-types', CourseTypeController::class);
        
        // Esto crea automáticamente las rutas para index, create, store, edit, update y destroy
        Route::resource('/courses', App\Http\Controllers\Admin\CourseController::class);

        // Rutas para gestionar el contenido de un curso específico
        Route::get('/courses/{course}/contents', [CourseContentController::class, 'index'])->name('courses.contents.index');
        Route::post('/courses/{course}/contents', [CourseContentController::class, 'store'])->name('courses.contents.store');
        Route::get('/contents/{content}/edit', [CourseContentController::class, 'edit'])->name('courses.contents.edit');
        Route::put('/contents/{content}', [CourseContentController::class, 'update'])->name('courses.contents.update');
        Route::delete('/contents/{content}', [CourseContentController::class, 'destroy'])->name('courses.contents.destroy');

        // Rutas para la gestión visual de usuarios y roles
        Route::get('/users', [UserController::class, 'index'])->name('users.index');
        Route::put('/users/{user}/role', [UserController::class, 'updateRole'])->name('users.update-role');
});

// Cambiamos a GET para que Laravel guarde la URL en el 'Intended URL' al redireccionar al login
Route::middleware(['auth'])->group(function () {
    Route::get('/checkout/init/{course}', [CheckoutController::class, 'initPayment'])->name('checkout.init');
    
    // RUTA DEL AULA VIRTUAL: El parámetro {content?} es opcional
    Route::get('/classroom/course/{course}/{content?}', [ClassroomController::class, 'show'])->name('classroom.show');
    // RUTA CRÍTICA: Servidor seguro para PDFs y Audios privados
    Route::get('/stream/content/{content}', [ContentStreamController::class, 'stream'])->name('content.stream');

    //Pasarela de Pagos    
    Route::post('/payment/flow/initiate/{course}', [FlowPaymentController::class, 'initiatePayment'])->name('payment.flow.initiate');
    Route::get('/payment/flow/return', [FlowPaymentController::class, 'paymentReturn'])->name('payment.flow.return');
});

// El webhook de confirmación es público
Route::post('/payment/flow/webhook', [FlowPaymentController::class, 'webhook'])->name('payment.flow.webhook');

// RUTAS TEMPORALES PARA REPARAR EL ERROR 500 EN HOSTING SIN CONSOLA
Route::get('/fix-laravel', function() {
    try {
        // 1. Limpiar todas las cachés viejas de tu PC local
        Artisan::call('config:clear');
        Artisan::call('route:clear');
        Artisan::call('view:clear');
        Artisan::call('cache:clear');
        
        // 2. Generar la clave de seguridad si falta
        Artisan::call('key:generate');
        
        // 3. Crear las tablas de la Base de Datos (Migraciones)
        Artisan::call('migrate', ['--force' => true]);
        
        // 4. Crear el enlace para que se vean las imágenes de tus cursos
        if (!file_exists(public_path('storage'))) {
            Artisan::call('storage:link');
        }

        return "<h1>¡Ecosistema optimizado con éxito!</h1><p>Las cachés se limpiaron, la base de datos se migró y el almacenamiento se enlazó correctamente. Ya puedes borrar estas rutas.</p>";
    } catch (\Exception $e) {
        return "<h1>Ocurrió un error al ejecutar los comandos:</h1><pre>" . $e->getMessage() . "</pre>";
    }
});
