<?php

use App\Http\Controllers\ContentController;
use App\Http\Controllers\DemoRequestController;
use App\Http\Controllers\LeadController;
use App\Http\Controllers\Pwa\VersionController;
use App\Http\Controllers\SubscriptionLockController;
use App\Models\Plan;
use Illuminate\Support\Facades\Route;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
*/

// Landing pública: muestra el único plan público (Profesional) para el trial.
Route::get('/', function () {
    return view('welcome', [
        'plans' => Plan::getPublicPlans(),   // los 3 planes públicos (grilla de precios)
        'plan' => Plan::getTrialPlan(),      // plan del trial self-serve (Profesional) — CTA/copy
    ]);
})->name('welcome');

/*
| Auto-registro self-serve RETIRADO (Fase C, plan "demo company"): ya no se
| crean empresas desde la landing. El acceso público ahora es la demo
| compartida (/demo, captura de lead + credenciales por correo, ver
| DemoRequestController) o "Solicitar cuenta" (bot de ventas → POST /leads,
| source=account_request). Se conserva el GET /registro como redirect para
| no romper enlaces viejos ya indexados; el POST que creaba la empresa
| desaparece por completo (ver TrialRegistrationTest eliminado y
| TrialRegistrationController, que queda sin ruta que lo invoque).
*/
Route::get('/registro', fn () => redirect('/'));

/*
| Pantalla de reactivación post-trial (Fase 3). El admin con suscripción expirada
| llega aquí (login lo redirige, o EnsureActiveSubscription al navegar a /admin) y
| puede solicitar una suscripción. La verificación de sesión la hace el controlador
| (redirige al login de Filament si es invitado).
*/
Route::get('/suscripcion', [SubscriptionLockController::class, 'show'])->name('subscription.locked');
Route::post('/suscripcion/solicitar', [SubscriptionLockController::class, 'requestSubscription'])
    ->middleware('throttle:6,1')
    ->name('subscription.request');

// Lead del bot de ventas de la landing (prospecto pre-registro). Throttle anti-spam.
Route::post('/leads', [LeadController::class, 'store'])
    ->middleware('throttle:5,1')
    ->name('leads.store');

/*
| Página pública que captura el lead y envía por correo las credenciales de
| los 3 usuarios demo compartidos (Fase B). Reemplazó el acceso passwordless
| (Fase C lo retiró). Throttle anti-spam de correos en el POST.
*/
Route::get('/demo', [DemoRequestController::class, 'show'])->name('demo.request');
Route::post('/demo', [DemoRequestController::class, 'store'])
    ->middleware('throttle:6,1') // anti-spam de correos
    ->name('demo.request.store');

/*
| Páginas pilar de contenido SEO (Track 3). Slugs keyword-forward.
*/
Route::controller(ContentController::class)->group(function () {
    Route::get('/software-para-prestamos', 'softwarePrestamos')->name('content.software-prestamos');
    Route::get('/software-de-cobranza', 'softwareCobranza')->name('content.software-cobranza');
    Route::get('/gestion-de-cartera', 'gestionCartera')->name('content.gestion-cartera');
    Route::get('/como-administrar-negocio-de-prestamos', 'comoAdministrar')->name('content.como-administrar');
    Route::get('/control-de-prestamos-excel', 'excel')->name('content.excel');
});

/*
|--------------------------------------------------------------------------
| PWA Routes - Credify GO! v2 (Vue SPA)
|--------------------------------------------------------------------------
|
| La nueva PWA es una SPA de Vue 3. Todas las rutas bajo /pwa/ retornan
| la misma vista blade que carga la aplicación Vue.
| El routing interno lo maneja Vue Router.
|
*/

Route::prefix('pwa')->group(function () {
    // Versión del build desplegado (commit + fecha). Debe ir ANTES del catch-all
    // para no ser absorbida por la ruta SPA.
    Route::get('/version', VersionController::class);

    // Catch-all route for Vue SPA
    Route::get('/{any?}', function () {
        return view('pwa');
    })->where('any', '.*');
});

/*
|--------------------------------------------------------------------------
| Legacy PWA Routes - DEPRECATED
|--------------------------------------------------------------------------
|
| Las rutas antiguas de Livewire están deprecadas.
| Redirigen a la nueva PWA para compatibilidad temporal.
|
*/

Route::prefix('app')->name('app.')->group(function () {
    // Redirect all /app/* routes to /pwa/*
    Route::get('/{any?}', function ($any = '') {
        $mapping = [
            'login' => '/pwa/login',
            'home' => '/pwa/home',
            'collections/today' => '/pwa/collections',
            'clients/search' => '/pwa/clients',
            'payments/today' => '/pwa/payments',
            'profile' => '/pwa/profile',
            'offline' => '/pwa/offline',
        ];

        $redirectTo = $mapping[$any] ?? '/pwa/home';

        return redirect($redirectTo);
    })->where('any', '.*');
});
