<?php

use CodeIgniter\Router\RouteCollection;

/** @var RouteCollection $routes */
// Rutas Públicas (Cliente)
$routes->get('/', 'Home::index');
$routes->get('cines', 'Home::cines');
$routes->get('api/locales', 'Home::localesJson');
$routes->get('cines/(:num)', 'Home::cineDetalle/$1');
$routes->get('alimentos', 'Home::alimentos');
$routes->post('alimentos/carrito/agregar', 'Alimentos::agregarCarrito');
$routes->post('alimentos/carrito/eliminar', 'Alimentos::eliminarCarrito');
$routes->post('alimentos/carrito/actualizar', 'Alimentos::actualizarCarrito');
$routes->get('alimentos/pago', 'Alimentos::pago');
$routes->post('alimentos/confirmar', 'Alimentos::confirmar');
$routes->get('alimentos/confirmacion/(:num)', 'Alimentos::confirmacion/$1');
$routes->get('alimentos/boleta/(:num)', 'Alimentos::descargarBoleta/$1');
$routes->get('membresia', 'Home::membresia');
$routes->get('promociones', 'Home::promociones');
$routes->get('promociones/aplicar/(:num)', 'Home::aplicarPromocion/$1');
$routes->get('promociones/cancelar', 'Home::cancelarPromocionTicket');
$routes->get('alimentos/promocion/(:num)', 'Alimentos::agregarPromocion/$1');
$routes->post('alimentos/promocion/(:num)', 'Alimentos::agregarPromocion/$1');
$routes->get('generar-horarios', 'Home::generarHorarios');
$routes->get('pelicula/(:num)', 'Home::pelicula/$1');

// Rutas de Reserva y Pago Simulado
$routes->get('reserva/asientos/(:num)', 'Reserva::asientos/$1');
$routes->post('reserva/asientos/(:num)', 'Reserva::seleccionarAsientos/$1');
$routes->get('reserva/productos/(:num)', 'Reserva::productos/$1');
$routes->post('reserva/productos/(:num)', 'Reserva::agregarProducto/$1');
$routes->post('reserva/productos/(:num)/actualizar', 'Reserva::actualizarProducto/$1');
$routes->post('reserva/productos/(:num)/eliminar', 'Reserva::eliminarProducto/$1');
$routes->get('reserva/pago', 'Reserva::pago');
$routes->post('reserva/confirmar', 'Reserva::confirmar');
$routes->get('reserva/confirmacion/(:num)', 'Reserva::confirmacion/$1');
$routes->get('reserva/boleto/(:num)', 'Reserva::descargarBoleto/$1');
$routes->get('mis-compras', 'Reserva::misCompras');

// Rutas de Compra de Membresía y Pago Simulado
$routes->get('membresia/pago/(:num)', 'Membresia::pago/$1');
$routes->post('membresia/confirmar', 'Membresia::confirmar');

// Rutas de Autenticación
$routes->get('login', 'Auth::login');
$routes->post('login', 'Auth::loginProcess');
$routes->get('registro', 'Auth::register');
$routes->post('registro', 'Auth::registerProcess');
$routes->get('logout', 'Auth::logout');

service('auth')->routes($routes);

// Rutas protegidas para Administradores
$routes->group('admin', ['filter' => 'adminAuth'], function($routes) {
    $routes->get('/', 'Admin\Peliculas::index');
    $routes->get('peliculas', 'Admin\Peliculas::index');
    $routes->get('peliculas/crear', 'Admin\Peliculas::crear');
    $routes->post('peliculas/guardar', 'Admin\Peliculas::guardar');
    $routes->get('peliculas/editar/(:num)', 'Admin\Peliculas::editar/$1');
    $routes->post('peliculas/actualizar/(:num)', 'Admin\Peliculas::actualizar/$1');
    $routes->get('peliculas/eliminar/(:num)', 'Admin\Peliculas::eliminar/$1');

    // Rutas para Usuarios
    $routes->get('usuarios', 'Admin\Usuarios::index');
    $routes->get('usuarios/crear', 'Admin\Usuarios::crear');
    $routes->post('usuarios/guardar', 'Admin\Usuarios::guardar');
    $routes->get('usuarios/editar/(:num)', 'Admin\Usuarios::editar/$1');
    $routes->post('usuarios/actualizar/(:num)', 'Admin\Usuarios::actualizar/$1');
    $routes->get('usuarios/eliminar/(:num)', 'Admin\Usuarios::eliminar/$1');
    $routes->get('usuarios/autocomplete', 'Admin\Usuarios::autocomplete');

    // Rutas para Membresías
    $routes->get('membresias', 'Admin\Membresias::index');
    $routes->get('membresias/crear', 'Admin\Membresias::crear');
    $routes->post('membresias/guardar', 'Admin\Membresias::guardar');
    $routes->get('membresias/editar/(:num)', 'Admin\Membresias::editar/$1');
    $routes->post('membresias/actualizar/(:num)', 'Admin\Membresias::actualizar/$1');
    $routes->get('membresias/eliminar/(:num)', 'Admin\Membresias::eliminar/$1');

    // Rutas para Géneros
    $routes->get('generos', 'Admin\Generos::index');
    $routes->get('generos/crear', 'Admin\Generos::crear');
    $routes->post('generos/guardar', 'Admin\Generos::guardar');
    $routes->get('generos/editar/(:num)', 'Admin\Generos::editar/$1');
    $routes->post('generos/actualizar/(:num)', 'Admin\Generos::actualizar/$1');
    $routes->get('generos/eliminar/(:num)', 'Admin\Generos::eliminar/$1');

    // Rutas para Locales
    $routes->get('locales', 'Admin\Locales::index');
    $routes->get('locales/crear', 'Admin\Locales::crear');
    $routes->post('locales/guardar', 'Admin\Locales::guardar');
    $routes->get('locales/editar/(:num)', 'Admin\Locales::editar/$1');
    $routes->post('locales/actualizar/(:num)', 'Admin\Locales::actualizar/$1');
    $routes->get('locales/eliminar/(:num)', 'Admin\Locales::eliminar/$1');

    // Rutas para Salas
    $routes->get('salas', 'Admin\Salas::index');
    $routes->get('salas/crear', 'Admin\Salas::crear');
    $routes->post('salas/guardar', 'Admin\Salas::guardar');
    $routes->get('salas/editar/(:num)', 'Admin\Salas::editar/$1');
    $routes->post('salas/actualizar/(:num)', 'Admin\Salas::actualizar/$1');
    $routes->get('salas/eliminar/(:num)', 'Admin\Salas::eliminar/$1');
    $routes->get('salas/generar-asientos/(:num)', 'Admin\Salas::generarAsientos/$1');

    // Rutas para Productos
    $routes->get('productos', 'Admin\Productos::index');
    $routes->get('productos/crear', 'Admin\Productos::crear');
    $routes->post('productos/guardar', 'Admin\Productos::guardar');
    $routes->get('productos/editar/(:num)', 'Admin\Productos::editar/$1');
    $routes->post('productos/actualizar/(:num)', 'Admin\Productos::actualizar/$1');
    $routes->get('productos/eliminar/(:num)', 'Admin\Productos::eliminar/$1');

    // Rutas para Promociones
    $routes->get('promociones', 'Admin\Promociones::index');
    $routes->get('promociones/crear', 'Admin\Promociones::crear');
    $routes->post('promociones/guardar', 'Admin\Promociones::guardar');
    $routes->get('promociones/editar/(:num)', 'Admin\Promociones::editar/$1');
    $routes->post('promociones/actualizar/(:num)', 'Admin\Promociones::actualizar/$1');
    $routes->get('promociones/eliminar/(:num)', 'Admin\Promociones::eliminar/$1');

    // Rutas para Pagos (generalmente solo ver listado)
    $routes->get('pagos', 'Admin\Pagos::index');

    // Rutas para Funciones
    $routes->get('funciones', 'Admin\Funciones::index');
    $routes->get('funciones/crear', 'Admin\Funciones::crear');
    $routes->post('funciones/guardar', 'Admin\Funciones::guardar');
    $routes->get('funciones/editar/(:num)', 'Admin\Funciones::editar/$1');
    $routes->post('funciones/actualizar/(:num)', 'Admin\Funciones::actualizar/$1');
    $routes->get('funciones/eliminar/(:num)', 'Admin\Funciones::eliminar/$1');
    $routes->get('funciones/ver/(:num)', 'Admin\Funciones::ver/$1');
    
    // AJAX endpoints para Axios
    $routes->get('funciones/validar-disponibilidad', 'Admin\Funciones::validarDisponibilidad');
    $routes->get('funciones/salas-por-local/(:num)', 'Admin\Funciones::getSalasByLocal/$1');
    $routes->get('funciones/asientos-sala/(:num)', 'Admin\Funciones::getAsientosSala/$1');
    $routes->get('funciones/ocupacion/(:num)', 'Admin\Funciones::getOcupacion/$1');
    $routes->post('funciones/generar-asientos/(:num)', 'Admin\Funciones::generarAsientos/$1');
});
