<?php

use App\Http\Controllers\AccessRequestController;
use App\Http\Controllers\AuthController;
use App\Http\Controllers\CommercialAdvisorController;
use App\Http\Controllers\CompanyController;
use App\Http\Controllers\DashboardController;
use App\Http\Controllers\PaymentController;
use App\Http\Controllers\PlanController;
use App\Http\Controllers\ProfileController;
use App\Http\Controllers\UserController;
use Illuminate\Support\Facades\Route;

Route::get('/', function () {
    return redirect()->route('login');
});

// Rutas de autenticación (sin middleware de IP en login para evitar bloqueos)
Route::get('/login', [AuthController::class, 'showLoginForm'])->name('login');
Route::post('/login', [AuthController::class, 'login'])->name('login.submit');
Route::post('/logout', [AuthController::class, 'logout'])->name('logout');

// Rutas protegidas con verificación de IP, autenticación y configuración de token API
Route::middleware(['backoffice.ip', 'backoffice.auth', 'api.token'])->group(function () {
    // Dashboard principal (acceso para todos los usuarios autenticados)
    Route::get('/dashboard', [DashboardController::class, 'index'])->name('dashboard');
    
    // API endpoints para el dashboard
    Route::get('/dashboard/stats', [DashboardController::class, 'getStats'])->name('dashboard.stats');
    Route::get('/dashboard/recent-activities', [DashboardController::class, 'getRecentActivitiesApi'])->name('dashboard.activities');
    Route::get('/dashboard/expiring-plans', [DashboardController::class, 'getExpiringPlansApi'])->name('dashboard.expiring-plans');
    
    // Verificación de autenticación para AJAX
    Route::get('/auth/check', [AuthController::class, 'checkAuth'])->name('auth.check');
    Route::get('/auth/session-info', [AuthController::class, 'sessionInfo'])->name('auth.session-info');
    
    // Perfil de usuario (accesible para todos los usuarios autenticados)
    Route::middleware(['user.permissions:edit_profile'])->group(function () {
        Route::get('/profile', [ProfileController::class, 'index'])->name('profile.index');
        Route::post('/profile/change-password', [ProfileController::class, 'changePassword'])->name('profile.change-password');
    });
    
    // Rutas accesibles para asesores comerciales y admin
    Route::middleware(['user.permissions:view_companies'])->group(function () {
        // Gestión de empresas (ABM empresas)
        Route::resource('companies', CompanyController::class);
        
        // Rutas administrativas adicionales (solo admin)
        Route::middleware(['user.permissions:manage_companies'])->group(function () {
            Route::get('/companies/export', [CompanyController::class, 'export'])->name('companies.export');
            Route::post('/companies/{id}/regenerate-welcome-token', [CompanyController::class, 'regenerateWelcomeToken'])->name('companies.regenerate-welcome-token');
            Route::post('/companies/{id}/assign-plan', [CompanyController::class, 'assignPlan'])->name('companies.assign-plan');
            Route::post('/companies/{id}/change-status', [CompanyController::class, 'changeStatus'])->name('companies.change-status');
            Route::post('/companies/{id}/suspend', [CompanyController::class, 'suspend'])->name('companies.suspend');
            Route::post('/companies/{id}/send-notification', [CompanyController::class, 'sendNotification'])->name('companies.send-notification');
        });
    });
    
    Route::middleware(['user.permissions:view_payments'])->group(function () {
        // Gestión de pagos
        Route::get('/payments', [PaymentController::class, 'index'])->name('payments.index');
        Route::get('/payments/{id}', [PaymentController::class, 'show'])->name('payments.show');
        Route::put('/payments/{id}/status', [PaymentController::class, 'updateStatus'])->name('payments.update-status');
        Route::get('/payments/export', [PaymentController::class, 'export'])->name('payments.export');
    });
    
    // Rutas administrativas (solo admins)
    Route::middleware(['user.permissions:manage_access_requests'])->group(function () {
        // Gestión de solicitudes de acceso (solo admin)
        Route::get('/access-requests', [AccessRequestController::class, 'index'])->name('access-requests.index');
        Route::get('/access-requests/{id}', [AccessRequestController::class, 'show'])->name('access-requests.show');
        Route::post('/access-requests/{id}/approve', [AccessRequestController::class, 'approve'])->name('access-requests.approve');
        Route::delete('/access-requests/{id}', [AccessRequestController::class, 'reject'])->name('access-requests.reject');
    });
    
    Route::middleware(['user.permissions:manage_advisors'])->group(function () {
        // Gestión de asesores comerciales (solo admin)
        Route::resource('commercial-advisors', CommercialAdvisorController::class);
        Route::patch('/commercial-advisors/{id}/status', [CommercialAdvisorController::class, 'changeStatus'])->name('commercial-advisors.change-status');
        Route::get('/commercial-advisors/export', [CommercialAdvisorController::class, 'export'])->name('commercial-advisors.export');
    });
    
    Route::middleware(['user.permissions:manage_plans'])->group(function () {
        // Gestión de planes (solo admin)
        Route::resource('plans', PlanController::class);
        Route::get('/plans/export', [PlanController::class, 'export'])->name('plans.export');
    });
    
    Route::middleware(['user.permissions:manage_users'])->group(function () {
        // Gestión de usuarios (solo admin)
        Route::resource('users', UserController::class);
    });
});