<?php

use App\Http\Controllers\Admin\AdminAuthController;
use App\Http\Controllers\Admin\AdminDashboardController;
use App\Http\Controllers\Admin\AdminDataController;
use App\Http\Controllers\Admin\BackupAdminController;
use App\Http\Controllers\Admin\SuperAdminController;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Route;

Route::get('/', function () {
    return File::get(public_path('index.html'));
})->name('dashboard');

/*
|--------------------------------------------------------------------------
| Super Admin area
|--------------------------------------------------------------------------
| Protected by the `admin` middleware which re-validates a session-stored
| JWT and enforces the super_admin role. All backup/restore endpoints are
| therefore independently authorized server-side (not just hidden in the UI).
*/
Route::middleware('admin.guest')->group(function () {
    Route::get('/admin/login', [AdminAuthController::class, 'showLogin'])->name('admin.login');
    Route::get('/admin-panel/login', [AdminAuthController::class, 'showLogin'])->name('admin.panel.login');
});

Route::post('/admin/login', [AdminAuthController::class, 'login'])->name('admin.login.post');
Route::post('/admin-panel/login', [AdminAuthController::class, 'login'])->name('admin.panel.login.post');
Route::post('/admin/logout', [AdminAuthController::class, 'logout'])->name('admin.logout');

Route::middleware(['admin'])->group(function () {
    Route::get('/admin', [AdminDashboardController::class, 'page'])->name('admin.dashboard');
    Route::get('/admin/backups', [BackupAdminController::class, 'page'])->name('admin.backups');
    Route::get('/admin/settings', [BackupAdminController::class, 'settingsPage'])->name('admin.settings');

    Route::get('/admin/users', [AdminDataController::class, 'users'])->name('admin.users');
    Route::get('/admin/groups', [AdminDataController::class, 'groups'])->name('admin.groups');
    Route::get('/admin/transactions', [AdminDataController::class, 'transactions'])->name('admin.transactions');
    Route::get('/admin/reports', [AdminDataController::class, 'reports'])->name('admin.reports');
    Route::get('/admin/audit-logs', [AdminDataController::class, 'auditLogs'])->name('admin.audit-logs');

    // JSON API consumed by the Super Admin UI.
    Route::prefix('/admin/api')->group(function () {
        Route::get('/dashboard/stats', [AdminDashboardController::class, 'stats']);

        Route::get('/backups', [BackupAdminController::class, 'data']);
        Route::post('/backups', [BackupAdminController::class, 'store']);
        Route::post('/backups/prune', [BackupAdminController::class, 'prune']);
        Route::get('/backups/settings', [BackupAdminController::class, 'settings']);
        Route::put('/backups/settings', [BackupAdminController::class, 'settings']);
        Route::get('/backups/{id}', [BackupAdminController::class, 'show']);
        Route::post('/backups/{id}/verify', [BackupAdminController::class, 'verify']);
        Route::get('/backups/{id}/download', [BackupAdminController::class, 'download']);
        Route::delete('/backups/{id}', [BackupAdminController::class, 'destroy']);
        Route::post('/backups/{id}/restore', [BackupAdminController::class, 'restore']);

        Route::get('/users', [AdminDataController::class, 'usersData']);
        Route::get('/groups', [AdminDataController::class, 'groupsData']);
        Route::get('/transactions', [AdminDataController::class, 'transactionsData']);
        Route::get('/reports', [AdminDataController::class, 'reportsData']);
        Route::get('/audit-logs', [AdminDataController::class, 'auditData']);

        Route::prefix('system')->group(function () {
            Route::get('/health', [SuperAdminController::class, 'systemHealth']);
            Route::get('/queue', [SuperAdminController::class, 'queueOverview']);
            Route::get('/queue/failed', [SuperAdminController::class, 'queueFailed']);
            Route::post('/queue/failed/{jobId}/retry', [SuperAdminController::class, 'retryFailedJob']);
            Route::delete('/queue/failed/{jobId}', [SuperAdminController::class, 'deleteFailedJob']);
            Route::post('/queue/failed/retry-all', [SuperAdminController::class, 'retryAllFailedJobs']);
            Route::delete('/queue/failed/flush', [SuperAdminController::class, 'flushFailedJobs']);

            Route::get('/cache', [SuperAdminController::class, 'cacheOverview']);
            Route::post('/cache/clear', [SuperAdminController::class, 'clearCache']);
            Route::post('/cache/redis/flush', [SuperAdminController::class, 'clearRedis']);
            Route::get('/cache/stats', [SuperAdminController::class, 'cacheStats']);

            Route::get('/financial', [SuperAdminController::class, 'financialOverview']);
            Route::get('/database', [SuperAdminController::class, 'databaseHealth']);
            Route::get('/bank', [SuperAdminController::class, 'bankMonitoring']);
            Route::get('/trace', [SuperAdminController::class, 'transactionTrace']);
        });
    });
});

// SPA fallback: serve React frontend for all unmatched non-API routes
Route::fallback(function () {
    return File::get(public_path('index.html'));
});
