<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\PublicController;
use App\Http\Controllers\Admin\AuthController;
use App\Http\Controllers\Admin\DashboardController;
use App\Http\Controllers\Admin\SliderController;
use App\Http\Controllers\Admin\ServicioController;
use App\Http\Controllers\Admin\NoticiaController;
use App\Http\Controllers\Admin\PremioController;
use App\Http\Controllers\Admin\TestimonioController;
use App\Http\Controllers\Admin\EstadisticaController;
use App\Http\Controllers\Admin\TickerController;
use App\Http\Controllers\Admin\ConfiguracionController;
use App\Http\Controllers\Admin\MenuItemController;
use App\Http\Controllers\Admin\PaginaController;
use App\Http\Controllers\Admin\ConcursoController;
use App\Http\Controllers\Admin\ConcursoParticipanteController;

/*
|--------------------------------------------------------------------------
| Rutas Públicas
|--------------------------------------------------------------------------
*/
Route::get('/', [PublicController::class, 'index'])->name('home');

// Páginas independientes
Route::get('/servicios',  [PublicController::class, 'servicios'])->name('servicios');
Route::get('/noticias',   [PublicController::class, 'noticias'])->name('noticias');
Route::get('/premios',    [PublicController::class, 'premios'])->name('premios');
Route::get('/comunidad',  [PublicController::class, 'comunidad'])->name('comunidad');
Route::get('/contacto',   [PublicController::class, 'contacto'])->name('contacto');

// Resultados ONEM (legacy — redirige a la vista dinámica si hay resultados publicados)
Route::get('/onem/resultados', function () {
    $config = \App\Models\Configuracion::pluck('valor', 'clave');
    return view('public.ONEM-Resultado', compact('config'));
})->name('onem.resultados');

// Resultado dinámico de concursos
Route::get('/resultado/{slug}', [PublicController::class, 'resultadoConcurso'])->name('resultado.show');
Route::post('/contacto',  [PublicController::class, 'contactoSend'])->name('contacto.send');

// Detalle de noticia
Route::get('/noticia/{slug}', [PublicController::class, 'noticia'])->name('noticia.show');

// Páginas estáticas (debe ir al final para no interferir con otras rutas)
Route::get('/p/{slug}', [PublicController::class, 'pagina'])->name('pagina.show');

/*
|--------------------------------------------------------------------------
| Rutas Admin - Autenticación
|--------------------------------------------------------------------------
*/
Route::prefix('admin')->name('admin.')->group(function () {
    Route::get('/login',  [AuthController::class, 'showLogin'])->name('login');
    Route::post('/login', [AuthController::class, 'login'])->name('login.post');
    Route::get('/logout', [AuthController::class, 'logout'])->name('logout');

    /*
    |----------------------------------------------------------------------
    | Rutas Admin - Panel (requieren autenticación)
    |----------------------------------------------------------------------
    */
    Route::middleware('admin.auth')->group(function () {
        Route::get('/dashboard', [DashboardController::class, 'index'])->name('dashboard');

        // Sliders
        Route::resource('sliders', SliderController::class)->except(['show']);

        // Servicios
        Route::resource('servicios', ServicioController::class)->except(['show']);

        // Noticias (también comunicados, convocatorias, logros)
        Route::resource('noticias', NoticiaController::class)->except(['show']);

        // Premios
        Route::resource('premios', PremioController::class)->except(['show']);

        // Testimonios
        Route::resource('testimonios', TestimonioController::class)->except(['show']);

        // Estadísticas
        Route::resource('estadisticas', EstadisticaController::class)->except(['show']);

        // Ticker
        Route::resource('ticker', TickerController::class)->except(['show']);

        // Menú de navegación
        Route::resource('menu-items', MenuItemController::class)->except(['show']);
        Route::post('menu-items/reorder', [MenuItemController::class, 'reorder'])->name('menu-items.reorder');

        // Páginas estáticas
        Route::resource('paginas', PaginaController::class)->except(['show']);

        // Concursos y Resultados
        Route::resource('concursos', ConcursoController::class)->except(['show']);
        Route::get('concursos/{concurso}/publicar', [ConcursoController::class, 'publicar'])->name('concursos.publicar');
        Route::resource('concursos.participantes', ConcursoParticipanteController::class)->except(['show']);
        // Carga masiva de participantes
        Route::get( 'concursos/{concurso}/participantes/plantilla-excel', [ConcursoParticipanteController::class, 'plantillaExcel'])->name('concursos.participantes.plantilla');
        Route::post('concursos/{concurso}/participantes/preview-masivo',  [ConcursoParticipanteController::class, 'previewMasivo'])->name('concursos.participantes.preview');
        Route::post('concursos/{concurso}/participantes/guardar-masivo',  [ConcursoParticipanteController::class, 'guardarMasivo'])->name('concursos.participantes.masivo');


        // Configuración
        Route::get('/configuracion',  [ConfiguracionController::class, 'index'])->name('configuracion.index');
        Route::post('/configuracion', [ConfiguracionController::class, 'update'])->name('configuracion.update');

        // Redirigir /admin y /admin/ al dashboard
        Route::get('',  fn() => redirect()->route('admin.dashboard'));
        Route::get('/', fn() => redirect()->route('admin.dashboard'));
    });
});
