<?php

use App\Http\Controllers\{
    AuthController,
    FileController,
    HomeController,
    // SalesController,
    SuperAdminController
};
use App\Http\Controllers\Sales\DashboardController as SalesDashboardController;
use App\Http\Controllers\Sales\WithdrawController as SalesWithdrawController;
use App\Http\Controllers\Sales\LbbController as SalesLbbController;
use App\Http\Controllers\Sales\SettingsController as SalesSettingsController;

use App\Http\Controllers\Admin\DashboardController as AdminDashboardController;
use App\Http\Controllers\Admin\TokenController as AdminTokenController;
use App\Http\Controllers\Admin\StudentController as AdminStudentController;
use App\Http\Controllers\Admin\SettingController as AdminSettingController;
use App\Http\Controllers\Admin\ExamController as AdminExamController;
use App\Http\Controllers\Admin\ExamPackageController as AdminExamPackageController;
use App\Http\Controllers\Admin\ExamQuestionController as AdminExamQuestionController;
use App\Http\Controllers\Admin\ExamLeaderboardController as AdminExamLeaderboardController;
use App\Http\Controllers\Admin\ExamParticipantController as AdminExamParticipantController;

// use App\Http\Controllers\Manager\SettingsController as ManagerSettingsController;
// use App\Http\Controllers\SuperAdmin\SettingsController as SuperAdminSettingsController;

use Illuminate\Support\Facades\Route;

/*
|--------------------------------------------------------------------------
| Public & Utility Routes
|--------------------------------------------------------------------------
*/
Route::get('/', [HomeController::class, 'index'])->name('home');
Route::get('/speed-test', fn() => 'ok');
Route::get('/test', fn() => 'ok');

Route::get('/file-upload', function () {
    return view('file-upload');
})->name('file-upload');

/*
|--------------------------------------------------------------------------
| Authentication Routes
|--------------------------------------------------------------------------
*/
Route::middleware('guest')->group(function () {
    Route::get('/login', [AuthController::class, 'showLogin'])->name('login');
    Route::post('/login', [AuthController::class, 'login'])->name('login.submit');
    Route::get('/register', [AuthController::class, 'showRegister'])->name('register');
    Route::post('/register', [AuthController::class, 'register'])->name('register.submit');
});

Route::post('/logout', [AuthController::class, 'logout'])
    ->middleware('auth')
    ->name('logout');

/*
|--------------------------------------------------------------------------
| Authenticated Routes (Common & Dashboard)
|--------------------------------------------------------------------------
*/
Route::middleware('auth')->group(function () {
    
    Route::get('/dashboard', fn() => view('dashboard'))->name('dashboard');

    // --- SISWA ---
    Route::prefix('siswa')->name('siswa.')->group(function () {
        Route::get('/exam', fn() => view('siswa.exam'))->name('exam');
        Route::get('/settings', fn() => view('siswa.settings'))->name('settings');
        
        Route::controller(HomeController::class)->group(function() { // Ganti ke controller yang sesuai jika ada
            Route::get('/cbt/{id}', fn($id) => view('siswa.cbt'))->name('cbt');
            Route::post('/cbt/{id}/submit', fn() => redirect()->route('siswa.history'))->name('cbt.submit');
            Route::get('/history', fn() => view('siswa.history'))->name('history');
            Route::get('/history/{id}', fn() => view('siswa.history'))->name('history.detail');
        });
    });

    // --- SALES ---
    // Route::prefix('sales')->name('sales.')->controller(SalesController::class)->group(function () {
    //     Route::get('/dashboard', 'dashboard')->name('dashboard');
    //     Route::get('/withdraw', 'withdraw')->name('withdraw');
    //     Route::post('/withdraw', 'withdraw')->name('withdraw.store');
    //     Route::get('/lbb', 'lbb')->name('lbb');
    //     Route::get('/settings', 'settings')->name('settings');
    //     Route::post('/update-profile', 'updateProfile')->name('profile.update');
    //     Route::post('/update-bank', 'updateBankAccount')->name('bank.update');
    //     Route::post('/update-password', 'updatePassword')->name('password.update');
    //     Route::post('/update-admin', 'updateAdminContact')->name('admin.update');
    // });

    Route::prefix('sales')->name('sales.')->middleware('auth')->group(function () {
        Route::get('/dashboard',[SalesDashboardController::class,'index'])->name('dashboard');
        
        Route::get('/withdraw',[SalesWithdrawController::class,'index'])->name('withdraw');
        Route::post('/withdraw',[SalesWithdrawController::class,'withdraw'])->name('store');
    
        Route::get('/lbb',[SalesLbbController::class,'index'])->name('lbb');
        
        Route::get('/settings',[SalesSettingsController::class,'settingsPage'])->name('settings');
        Route::get('/update-profile',[SalesSettingsController::class,'updateProfile'])->name('profile.update');
        Route::get('/update-bank',[SalesSettingsController::class,'updateBankAccount'])->name('bank.update');
        Route::get('/update-password',[SalesSettingsController::class,'updatePassword'])->name('password.update');
        Route::get('/update-admin',[SalesSettingsController::class,'updateAdminContact'])->name('admin.update');
    
    });

    // --- SUPER ADMIN ---
    Route::prefix('super-admin')->name('super-admin.')->controller(SuperAdminController::class)->group(function () {
        Route::get('/dashboard', 'dashboard')->name('dashboard');
        
        // LBB Management
        Route::prefix('lbb')->name('lbb.')->group(function() {
            Route::get('/', 'lbb')->name('index');
            Route::get('/create', 'createLBB')->name('create');
            Route::post('/', 'storeLBB')->name('store');
            Route::put('/{id}', 'updateLBB')->name('update');
            Route::post('/{id}/status', 'updateLbbStatus')->name('update-status');
        });

        // Tokens & Transactions
        Route::get('/token', 'token')->name('token');
        Route::get('/token/transactions', 'tokenTransactions')->name('token.transactions');
        Route::post('/token/inject', 'injectToken')->name('token.inject');
        Route::get('/token-order/{id}', 'showTokenOrder')->name('token-order.show');
        Route::post('/token-order/{id}/status', 'updateTokenOrderStatus')->name('token-order.update-status');

        // Sales Management
        Route::prefix('sales')->name('sales.')->group(function() {
            Route::get('/', 'index')->name('index');
            Route::post('/', 'store')->name('store');
            Route::put('/{id}', 'update')->name('update');
        });
            // ->only(['index', 'store', 'update', 'destroy'])
            // ->names('sales'); 
        Route::post('/sales/{id}/status', 'updateSalesStatus')->name('sales.update-status');

        // Withdrawals
        Route::get('/withdraw', 'withdraw')->name('withdraw');
        Route::post('/withdraw/{id}/approve', 'approveWithdraw')->name('withdraw.approve');
        Route::post('/withdraw/{id}/reject', 'rejectWithdraw')->name('withdraw.reject');

        // Settings
        Route::prefix('settings')->name('settings.')->group(function() {
            Route::get('/', 'settings')->name('index');
            Route::post('/general', 'updateGeneralSettings')->name('update-general');
            Route::post('/token', 'updateTokenSettings')->name('update-token');
            Route::post('/commission', 'updateCommissionSettings')->name('update-commission');
            Route::post('/bank', 'updateBankSettings')->name('update-bank');
            Route::post('/footer', 'updateFooterSettings')->name('update-footer');
            Route::post('/social', 'updateSocialMediaSettings')->name('update-social');
            Route::post('/backup', 'backupDatabase')->name('backup');
            Route::get('/backup/download', 'downloadBackup')->name('backup.download');
        });
    });

    // --- ADMIN LBB ---
    Route::prefix('admin')->name('admin.')->group(function () {
        Route::get('/dashboard',[AdminDashboardController::class,'index'])->name('dashboard');
        
        // Token Management
        Route::prefix('token')->controller(AdminTokenController::class)->name('token.')->group(function() {
            Route::get('/', 'index')->name('index');
            Route::get('/purchase', 'purchase')->name('purchase');
            Route::post('/purchase', 'purchase')->name('purchase.store');
        });
        
        // Students Management
        Route::prefix('students')->controller(AdminStudentController::class)->name('students.')->group(function() {
            Route::get('/', 'index')->name('index');
            Route::post('/', 'storeStudent')->name('store');
            Route::get('/template', 'downloadTemplate')->name('template');
            Route::post('/import', 'importStudents')->name('import');
            Route::delete('/batch-delete', 'batchDeleteStudents')->name('batch-delete');
            Route::get('/{id}', 'showStudent')->name('show');
            Route::put('/{id}', 'updateStudent')->name('update');
            Route::delete('/{id}', 'destroyStudent')->name('destroy');
            Route::post('/{id}/reset-password', 'resetPassword')->name('reset-password');
        });

        // Exams Management
        Route::prefix('exams')->controller(AdminExamController::class)->name('exams.')->group(function() {
            Route::get('/', 'index')->name('index');
            Route::post('/', 'store')->name('store');
            Route::delete('/batch-delete', 'batchDestroy')->name('batch-delete');
            Route::get('/{id}', 'show')->name('show');
            Route::put('/{id}', 'update')->name('update');
            Route::delete('/{id}', 'destroy')->name('destroy');
        });

        // Exam Details, Packages & Questions
        Route::get('/exam/{code}/detail', [AdminExamPackageController::class, 'index'])->name('exam.detail');
        Route::get('/exam/{code}/leaderboard', [AdminExamLeaderboardController::class, 'index'])->name('exam.leaderboard');
        Route::get('/exam/{code}/leaderboard/export', [AdminExamLeaderboardController::class, 'export'])->name('exam.leaderboard.export');
        Route::get('/exam/{code}/attempt/{attemptId}/topic-breakdown', [AdminExamLeaderboardController::class, 'getTopicBreakdown'])->name('exam.attempt.topic-breakdown');
        
        Route::prefix('exam/{code}/participants')->controller(AdminExamParticipantController::class)->name('exam.participants.')->group(function() {
            Route::get('/', 'index')->name('index');
            Route::post('/', 'store')->name('add');
            Route::delete('/', 'destroy')->name('delete');
        });

        Route::prefix('exam/{code}/package')->controller(AdminExamPackageController::class)->name('exam.package.')->group(function() {
            Route::post('/', 'store')->name('store');
            Route::put('/bulk-settings', 'bulkUpdateSettings')->name('bulk-settings');
            Route::get('/{id}', 'index')->name('detail');
            Route::get('/{id}/show', 'show')->name('show');
            Route::put('/{id}', 'update')->name('update');
            Route::delete('/{id}', 'destroy')->name('destroy');
            
            // Questions inside Package
            Route::prefix('{id}/questions')->controller(AdminExamQuestionController::class)->name('questions.')->group(function() {
                Route::get('/', 'index')->name('index');
                Route::get('/template', 'downloadTemplate')->name('template');
                Route::post('/import', 'import')->name('import');
                Route::post('/', 'store')->name('store');
                Route::get('/{questionId}', 'show')->name('show');
                Route::put('/{questionId}', 'update')->name('update');
                Route::delete('/selected', 'destroySelected')->name('delete.selected');
                Route::delete('/{questionId}', 'destroy')->name('destroy');
            });
        });

        // Admin Settings
        Route::prefix('settings')->controller(AdminSettingController::class)->name('settings.')->group(function() {
            Route::get('/', 'index')->name('index');
            Route::post('/branding', 'updateBranding')->name('update-branding');
            Route::post('/password', 'updatePassword')->name('update-password');
        });
    });

    // --- FILE MANAGEMENT ---
    Route::prefix('files')->name('files.')->controller(FileController::class)->group(function () {
        Route::post('/upload', 'upload')->name('upload');
        Route::post('/upload-multiple', 'uploadMultiple')->name('upload-multiple');
        Route::get('/download/{path}', 'download')->name('download');
        Route::delete('/delete', 'delete')->name('delete');
        Route::get('/info', 'info')->name('info');
        Route::get('/content', 'content')->name('content');
    });
});