<?php

use Illuminate\Support\Facades\Route;
use Illuminate\Http\Request;
use App\Http\Controllers\HomeController;
use App\Http\Controllers\ExtensionController;
use App\Http\Controllers\RecordingController;
use App\Http\Controllers\BackupController;
use App\Http\Controllers\Trunks\InboundRouteController;
use App\Http\Controllers\Trunks\TeamsConfigController;
use App\Http\Controllers\OutboundRouteController;
use App\Http\Controllers\SipTrunkController;
use App\Http\Controllers\DashboardController;
use App\Http\Controllers\DeviceController;
use App\Http\Controllers\PickupGroupController;
use App\Http\Controllers\RingGroupController;
use App\Http\Controllers\SpeedDialController;
use App\Http\Controllers\PinController;
use App\Http\Controllers\Applications\FlowSwitchController;
use App\Http\Controllers\Applications\HolidayController;
use App\Http\Controllers\Applications\TimeConditionController;
use App\Http\Controllers\Applications\TimeGroupController;
use App\Http\Controllers\SecurityController;
use App\Http\Controllers\FirewallController;
use App\Http\Controllers\CallCenter\AgentConsoleController;
use App\Http\Controllers\CallCenter\AgentController;
use App\Http\Controllers\CallCenter\MusicOnHoldController;
use App\Http\Controllers\CallCenter\OverviewController as CallCenterOverviewController;
use App\Http\Controllers\CallCenter\QueueController as CallCenterQueueController;
use App\Http\Controllers\CallCenter\WallboardController;
use App\Http\Controllers\OperatorConsoleController;
use App\Http\Controllers\SettingsController;
use App\Http\Controllers\UserController;
use App\Http\Controllers\AuditLogController;
use App\Http\Controllers\WebphoneController;
use App\Http\Controllers\ExtensionFeatureController;
use App\Http\Controllers\AnalyticsController;
use App\Http\Controllers\CdrController;
use App\Http\Controllers\ProvisioningController;

/*
|--------------------------------------------------------------------------
| Dashboard
|--------------------------------------------------------------------------
*/

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

// Extension Status page - accessible without authentication
Route::get('/extensions/status', [ExtensionController::class, 'status'])
    ->name('extensions.status')
    ->middleware('web');

// Device routes - require auth + extensions permission
Route::middleware(['auth', 'permission:extensions'])->prefix('extensions')->group(function () {
    Route::get('/{extension}/device', [DeviceController::class, 'show'])->name('extensions.device.show');
    Route::put('/{extension}/device', [DeviceController::class, 'update'])->name('extensions.device.update');
    Route::post('/{extension}/device/reboot', [DeviceController::class, 'reboot'])->name('extensions.device.reboot');
    Route::post('/{extension}/device/ping', [DeviceController::class, 'ping'])->name('extensions.device.ping');
    Route::get('/{extension}/device/gui', [DeviceController::class, 'gui'])->name('extensions.device.gui');
    Route::post('/{extension}/device/sync', [DeviceController::class, 'sync'])->name('extensions.device.sync');
    Route::get('/{extension}/device/debug', [DeviceController::class, 'debug'])->name('extensions.device.debug');
});

// Recordings module
Route::middleware(['auth', 'permission:recordings'])->group(function () {
    Route::get('/recordings', [\App\Http\Controllers\RecordingController::class, 'index'])->name('recordings.index');
    Route::get('/recordings/workspace/{filename}', [\App\Http\Controllers\RecordingController::class, 'workspace'])
        ->where('filename', '.*')->name('recordings.workspace');
    Route::get('/recordings/stream/{filename}', [\App\Http\Controllers\RecordingController::class, 'stream'])
        ->where('filename', '.*')->name('recordings.stream');
    Route::get('/recordings/download/{filename}', [\App\Http\Controllers\RecordingController::class, 'download'])
        ->where('filename', '.*')->name('recordings.download');
    Route::post('/recordings/meta/{filename}', [\App\Http\Controllers\RecordingController::class, 'updateMeta'])
        ->where('filename', '.*')->name('recordings.meta');
    Route::post('/recordings/transcribe/{filename}', [\App\Http\Controllers\RecordingController::class, 'transcribe'])
        ->where('filename', '.*')->name('recordings.transcribe');
    Route::delete('/recordings/{filename}', [\App\Http\Controllers\RecordingController::class, 'destroy'])
        ->where('filename', '.*')->name('recordings.destroy');
    Route::post('/extensions/bulk-recording', [\App\Http\Controllers\RecordingController::class, 'bulkSetExtensionRecording'])
        ->name('extensions.bulk-recording');
});
Route::get('/analytics', [\App\Http\Controllers\AnalyticsController::class, 'index'])
    ->middleware(['auth', 'permission:analytics'])->name('analytics.index');
Route::get('/provisioning', [ProvisioningController::class, 'index'])
    ->middleware(['auth', 'permission:extensions'])->name('provisioning.index');
Route::get('/extensions/live', [ExtensionController::class, 'live'])
    ->name('extensions.live')
    ->middleware(['auth', 'permission:extensions']);
Route::prefix('operator')->middleware(['web','auth','permission:operator'])->group(function () {

    Route::get('/', [OperatorConsoleController::class, 'index'])->name('operator.index');

    Route::post('/authenticate', [OperatorConsoleController::class, 'authenticate'])->name('operator.authenticate');
    Route::post('/logout', [OperatorConsoleController::class, 'logout'])->name('operator.logout');

    Route::get('/live', [OperatorConsoleController::class, 'live'])->name('operator.live');
    Route::get('/directory', [OperatorConsoleController::class, 'directory'])->name('operator.directory');

    /* CORE CALL CONTROL */
    Route::post('/call', [OperatorConsoleController::class, 'call'])->name('operator.call');
    Route::post('/transfer', [OperatorConsoleController::class, 'transfer'])->name('operator.transfer');
    Route::post('/hangup', [OperatorConsoleController::class, 'hangup'])->name('operator.hangup');

    /* PARKING (FIXES YOUR ERROR) */
    Route::post('/park', [OperatorConsoleController::class, 'park'])->name('operator.park');

    /* QUEUE */
    Route::post('/queue/pickup', [OperatorConsoleController::class, 'pickupQueue'])->name('operator.queue.pickup');



});

Route::prefix('wallboard')->middleware(['web','auth','permission:monitoring'])->group(function () {

    Route::get('/', [WallboardController::class, 'index'])->name('wallboard.index');
    Route::post('/authenticate', [WallboardController::class, 'authenticate'])->name('wallboard.authenticate');
    Route::post('/logout', [WallboardController::class, 'logout'])->name('wallboard.logout');
    Route::get('/live', [WallboardController::class, 'live'])->name('wallboard.live');
    Route::get('/stream', [WallboardController::class, 'stream'])->name('wallboard.stream');
    Route::get('/manage', [WallboardController::class, 'manage'])->name('wallboard.manage');
    Route::post('/manage', [WallboardController::class, 'updateSettings'])->name('wallboard.manage.update');

});

    // Delete Extension
Route::middleware('auth')->group(function () {

Route::get('/dashboard', [DashboardController::class, 'index'])->middleware(['auth', 'permission:dashboard'])
    ->name('dashboard');

Route::prefix('settings')->middleware(['auth', 'permission:settings'])->group(function () {
    Route::get('/system', [SettingsController::class, 'index'])
        ->name('settings.system');
    Route::get('/email', [\App\Http\Controllers\EmailSettingController::class, 'index'])
        ->name('settings.email');
    Route::post('/email', [\App\Http\Controllers\EmailSettingController::class, 'update'])
        ->name('settings.email.update');
    Route::post('/email/test', [\App\Http\Controllers\EmailSettingController::class, 'test'])
        ->name('settings.email.test');
    Route::get('/health', [\App\Http\Controllers\SystemHealthController::class, 'index'])
        ->name('settings.health');
    Route::post('/health/fix', [\App\Http\Controllers\SystemHealthController::class, 'fix'])
        ->name('settings.health.fix');
    Route::post('/system/ip-settings', [SettingsController::class, 'updateIpSettings'])
        ->name('settings.system.ip.update');
    Route::post('/system/sip-nat', [SettingsController::class, 'updateSipNat'])
        ->name('settings.system.sip-nat.update');
    Route::post('/system/rtp-media', [SettingsController::class, 'updateRtpMedia'])
        ->name('settings.system.rtp-media.update');
    Route::post('/system/webrtc', [SettingsController::class, 'updateWebrtc'])
        ->name('settings.system.webrtc.update');
    Route::post('/system/ip-settings/apply', [SettingsController::class, 'applyIpSettings'])
        ->name('settings.system.ip.apply');
    Route::post('/system/backups/create', [SettingsController::class, 'createBackup'])
        ->name('settings.system.backups.create');
});

Route::prefix('backup')->middleware(['auth', 'permission:settings'])->group(function () {
    Route::get('/', [BackupController::class, 'index'])->name('backup.index');
    Route::get('/create', [BackupController::class, 'create'])->name('backup.create');
    Route::post('/', [BackupController::class, 'store'])->name('backup.store');
    Route::get('/{id}', [BackupController::class, 'show'])->name('backup.show');
    Route::get('/{id}/download', [BackupController::class, 'download'])->name('backup.download');
    Route::post('/{id}/restore', [BackupController::class, 'restore'])->name('backup.restore');
    Route::delete('/{id}', [BackupController::class, 'destroy'])->name('backup.destroy');
    Route::get('/destinations', [BackupController::class, 'destinations'])->name('backup.destinations');
    Route::post('/destinations', [BackupController::class, 'storeDestination'])->name('backup.destinations.store');
    Route::post('/destinations/{id}/test', [BackupController::class, 'testDestination'])->name('backup.destinations.test');
    Route::get('/policies', [BackupController::class, 'policies'])->name('backup.policies');
    Route::post('/policies', [BackupController::class, 'storePolicy'])->name('backup.policies.store');
    Route::post('/policies/{id}/toggle', [BackupController::class, 'togglePolicy'])->name('backup.policies.toggle');
    Route::delete('/policies/{id}', [BackupController::class, 'destroyPolicy'])->name('backup.policies.destroy');
    Route::get('/disaster-recovery', [BackupController::class, 'disasterRecovery'])->name('backup.disaster-recovery');
    Route::post('/clone-to-lab', [BackupController::class, 'cloneToLab'])->name('backup.clone-to-lab');
    Route::get('/stats', [BackupController::class, 'stats'])->name('backup.stats');
});

Route::post('/system/actions', [SettingsController::class, 'systemAction'])
        ->name('settings.system.actions');
    Route::post('/system/ssl/letsencrypt', [SettingsController::class, 'issueLetsEncrypt'])
        ->name('settings.system.ssl.letsencrypt');
    Route::post('/system/ssl/manual', [SettingsController::class, 'applySslManual'])
        ->name('settings.system.ssl.manual');
    Route::post('/system/pbx-defaults', [SettingsController::class, 'updatePbxDefaults'])
        ->name('settings.system.pbx-defaults.update');
    Route::post('/system/modules', [SettingsController::class, 'toggleModule'])
        ->name('settings.system.modules.toggle');

    // System Update — Super Admin only
    Route::get('/update', [\App\Http\Controllers\SystemUpdateController::class, 'index'])
        ->name('settings.update');
    Route::post('/update/start', [\App\Http\Controllers\SystemUpdateController::class, 'start'])
        ->name('settings.update.start');
    Route::get('/update/check', [\App\Http\Controllers\SystemUpdateController::class, 'check'])
        ->name('settings.update.check');
    Route::get('/update/poll', [\App\Http\Controllers\SystemUpdateController::class, 'poll'])
        ->name('settings.update.poll');
    Route::get('/update/log', [\App\Http\Controllers\SystemUpdateController::class, 'downloadLog'])
        ->name('settings.update.log');
});

// Number Blacklist (block inbound caller-IDs / outbound destinations)
Route::prefix('blacklist')->middleware(['auth', 'permission:applications'])->group(function () {
    Route::get('/', [\App\Http\Controllers\NumberBlacklistController::class, 'index'])->name('blacklist.index');
    Route::post('/', [\App\Http\Controllers\NumberBlacklistController::class, 'store'])->name('blacklist.store');
    Route::put('/{entry}', [\App\Http\Controllers\NumberBlacklistController::class, 'update'])->name('blacklist.update');
    Route::delete('/{entry}', [\App\Http\Controllers\NumberBlacklistController::class, 'destroy'])->name('blacklist.destroy');
    Route::post('/{entry}/toggle', [\App\Http\Controllers\NumberBlacklistController::class, 'toggle'])->name('blacklist.toggle');
    Route::post('/test', [\App\Http\Controllers\NumberBlacklistController::class, 'test'])->name('blacklist.test');
    Route::post('/bypass', [\App\Http\Controllers\NumberBlacklistController::class, 'setBypass'])->name('blacklist.bypass');
});

Route::prefix('extensions')->middleware(['auth', 'permission:extensions'])->group(function () {

    // All Extensions list
    Route::get('/', [ExtensionController::class, 'index'])
        ->name('extensions.index');

    Route::get('/hot-desking', [ExtensionController::class, 'hotDesking'])
        ->name('extensions.hot-desking');

    Route::get('/import', [ExtensionController::class, 'importForm'])
        ->name('extensions.import');
    Route::post('/import/preview', [ExtensionController::class, 'importPreview'])
        ->name('extensions.import.preview');
    Route::post('/import', [ExtensionController::class, 'importStore'])
        ->name('extensions.import.store');
    Route::get('/import/template', [ExtensionController::class, 'downloadImportTemplate'])
        ->name('extensions.import.template');

    Route::get('/export', [ExtensionController::class, 'exportForm'])
        ->name('extensions.export');
    Route::get('/export/download', [ExtensionController::class, 'exportDownload'])
        ->name('extensions.export.download');

    Route::get('/bulk-modification', [ExtensionController::class, 'bulkModification'])
        ->name('extensions.bulk-modification');
    Route::post('/bulk-modification', [ExtensionController::class, 'bulkModificationUpdate'])
        ->name('extensions.bulk-modification.update');
    Route::post('/bulk-modification/select-visible', [ExtensionController::class, 'bulkModificationSelectVisible'])
        ->name('extensions.bulk-modification.select-visible');
    Route::post('/bulk-modification/select-filtered', [ExtensionController::class, 'bulkModificationSelectFiltered'])
        ->name('extensions.bulk-modification.select-filtered');
    Route::post('/bulk-modification/clear-selection', [ExtensionController::class, 'bulkModificationClearSelection'])
        ->name('extensions.bulk-modification.clear-selection');

    Route::post('/hot-desking/assign', [ExtensionController::class, 'hotDeskAssign'])
        ->name('extensions.hot-desking.assign');
    Route::post('/hot-desking/login', [ExtensionController::class, 'hotDeskLogin'])
        ->name('extensions.hot-desking.login');
    Route::post('/hot-desking/logout', [ExtensionController::class, 'hotDeskLogout'])
        ->name('extensions.hot-desking.logout');
    Route::post('/hot-desking/sync', [ExtensionController::class, 'hotDeskSyncDialplan'])
        ->name('extensions.hot-desking.sync');

    Route::get('/bulk-extensions', [ExtensionController::class, 'bulkExtensions'])
        ->name('extensions.bulk-extensions');
    Route::post('/bulk-extensions', [ExtensionController::class, 'bulkExtensionsStore'])
        ->name('extensions.bulk-extensions.store');

    // Create Extension
    Route::get('/create', [ExtensionController::class, 'create'])
        ->name('extensions.create');

    // Store Extension
    Route::post('/', [ExtensionController::class, 'store'])
        ->name('extensions.store');

    // Edit Extension
    Route::get('/{id}/edit', [ExtensionController::class, 'edit'])
        ->name('extensions.edit');

    // Update Extension
    Route::post('/{id}/update', [ExtensionController::class, 'update'])
        ->name('extensions.update');

    Route::get('/live-summary', [ExtensionController::class, 'liveSummary'])
        ->name('extensions.live-summary');

    Route::delete('/{id}', [ExtensionController::class, 'destroy'])
        ->name('extensions.destroy');

    // Multi-device management
    Route::post('/{id}/devices', [ExtensionController::class, 'addDevice'])
        ->name('extensions.devices.add');
    Route::delete('/{id}/devices/{deviceId}', [ExtensionController::class, 'removeDevice'])
        ->name('extensions.devices.remove');
    Route::post('/{id}/devices/{deviceId}/toggle-ring', [ExtensionController::class, 'toggleDeviceRing'])
        ->name('extensions.devices.toggle-ring');

    // Mobile app provisioning (QR + settings for Zoiper / Linphone)
    Route::get('/{id}/devices/{deviceId}/mobile-provision', [ExtensionController::class, 'mobileProvision'])
        ->name('extensions.devices.mobile-provision');

    // Queue membership (AJAX)
    Route::post('/{id}/queue-toggle', [ExtensionController::class, 'queueToggle'])
        ->name('extensions.queue-toggle');
    Route::post('/{id}/queue-pause', [ExtensionController::class, 'queuePause'])
        ->name('extensions.queue-pause');

    // Outbound routing (Routing tab) — test/simulate
    Route::post('/{id}/routing/test', [ExtensionController::class, 'testRouting'])
        ->name('extensions.routing.test');

    // Bulk Delete Extensions
    Route::post('/bulk-delete', [ExtensionController::class, 'bulkDelete'])
        ->name('extensions.bulk-delete');

    // PIN enforcement per extension
    Route::post('/{extension}/toggle-require-pin', [ExtensionController::class, 'toggleRequirePin'])
        ->name('extensions.toggle-require-pin');

    // Extension Features
    Route::prefix('features')->group(function () {
        Route::post('/toggle', [ExtensionFeatureController::class, 'toggle'])
            ->name('extension-features.toggle');
        Route::post('/forwarding', [ExtensionFeatureController::class, 'setForwarding'])
            ->name('extension-features.setForwarding');
        Route::post('/follow-me-dest', [ExtensionFeatureController::class, 'setFollowMeDest'])
            ->name('extension-features.setFollowMeDest');
        Route::post('/bulk-toggle', [ExtensionFeatureController::class, 'bulkToggle'])
            ->name('extension-features.bulkToggle');
        Route::post('/sync-dialplan', [ExtensionFeatureController::class, 'syncDialplan'])
            ->name('extension-features.syncDialplan');
        Route::post('/ring-time', [ExtensionFeatureController::class, 'setRingTime'])
            ->name('extension-features.setRingTime');
    });
});

/*
|--------------------------------------------------------------------------
| Asterisk Reload (placeholder for now)
|--------------------------------------------------------------------------
*/

Route::post('/asterisk/reload', function () {
    $action = request('action', 'core');

    return back()->with('status', "Asterisk {$action} reload triggered (placeholder).");
})->name('asterisk.reload');



/*
|--------------------------------------------------------------------------
| Extensions (PBX)
|--------------------------------------------------------------------------
*/


/*
|--------------------------------------------------------------------------
| User Management
|--------------------------------------------------------------------------
*/
Route::prefix('users')->middleware(['auth', 'permission:users'])->group(function () {
    Route::get('/', [UserController::class, 'index'])->name('users.index');
    Route::get('/create', [UserController::class, 'create'])->name('users.create');
    Route::post('/', [UserController::class, 'store'])->name('users.store');
    Route::get('/{id}/edit', [UserController::class, 'edit'])->name('users.edit');
    Route::post('/{id}/update', [UserController::class, 'update'])->name('users.update');
    Route::delete('/{id}', [UserController::class, 'destroy'])->name('users.destroy');
});

/*
|--------------------------------------------------------------------------
| Role Management (RBAC)
|--------------------------------------------------------------------------
*/
Route::prefix('roles')->middleware(['auth', 'permission:users'])->group(function () {
    Route::get('/', [\App\Http\Controllers\RoleController::class, 'index'])->name('roles.index');
    Route::get('/create', [\App\Http\Controllers\RoleController::class, 'create'])->name('roles.create');
    Route::post('/', [\App\Http\Controllers\RoleController::class, 'store'])->name('roles.store');
    Route::get('/{role}/edit', [\App\Http\Controllers\RoleController::class, 'edit'])->name('roles.edit');
    Route::put('/{role}', [\App\Http\Controllers\RoleController::class, 'update'])->name('roles.update');
    Route::delete('/{role}', [\App\Http\Controllers\RoleController::class, 'destroy'])->name('roles.destroy');
});

/*
|--------------------------------------------------------------------------
| Audit Logs
|--------------------------------------------------------------------------
*/
Route::prefix('audit-logs')->middleware(['auth', 'permission:audit_logs'])->group(function () {
    Route::get('/', [AuditLogController::class, 'index'])->name('audit-logs.index');
    Route::get('/{id}', [AuditLogController::class, 'show'])->name('audit-logs.show');
});

/*
|--------------------------------------------------------------------------
| Webphone
|--------------------------------------------------------------------------
*/
/*
|--------------------------------------------------------------------------
| Webphone (standalone — no admin auth required)
|--------------------------------------------------------------------------
| Users access /webphone directly, login with extension + SIP password.
| No admin account needed.
*/
Route::prefix('webphone')->group(function () {
    Route::get('/', [WebphoneController::class, 'index'])->name('webphone.index');
    Route::get('/login', [WebphoneController::class, 'loginForm'])->name('webphone.login');
    Route::post('/authenticate', [WebphoneController::class, 'authenticate'])->name('webphone.authenticate');
    Route::get('/phone', [WebphoneController::class, 'phone'])->name('webphone.phone');
    Route::post('/logout', [WebphoneController::class, 'logout'])->name('webphone.logout');
});

/*
|--------------------------------------------------------------------------
| Call Center
|--------------------------------------------------------------------------
*/
Route::prefix('call-center')->middleware(['auth', 'permission:call_center'])->group(function () {
    Route::get('/', [CallCenterOverviewController::class, 'index'])->name('call-center.overview');

    Route::get('/queues', [CallCenterQueueController::class, 'index'])->name('call-center.queues.index');
    Route::get('/queues/create', [CallCenterQueueController::class, 'create'])->name('call-center.queues.create');
    Route::post('/queues', [CallCenterQueueController::class, 'store'])->name('call-center.queues.store');
    Route::get('/queues/{queue}/edit', [CallCenterQueueController::class, 'edit'])->name('call-center.queues.edit');
    Route::put('/queues/{queue}', [CallCenterQueueController::class, 'update'])->name('call-center.queues.update');
    Route::delete('/queues/{queue}', [CallCenterQueueController::class, 'destroy'])->name('call-center.queues.destroy');

    Route::get('/agents', [AgentController::class, 'index'])->name('call-center.agents.index');
    Route::get('/agents/create', [AgentController::class, 'create'])->name('call-center.agents.create');
    Route::post('/agents', [AgentController::class, 'store'])->name('call-center.agents.store');
    Route::get('/agents/{agent}/edit', [AgentController::class, 'edit'])->name('call-center.agents.edit');
    Route::put('/agents/{agent}', [AgentController::class, 'update'])->name('call-center.agents.update');
    Route::delete('/agents/{agent}', [AgentController::class, 'destroy'])->name('call-center.agents.destroy');

    Route::get('/moh', [MusicOnHoldController::class, 'index'])->name('call-center.moh.index');
    Route::post('/moh', [MusicOnHoldController::class, 'store'])->name('call-center.moh.store');
    Route::delete('/moh/{className}/{fileName}', [MusicOnHoldController::class, 'destroy'])->name('call-center.moh.destroy');
    Route::get('/moh/{className}/{fileName}/play', [MusicOnHoldController::class, 'play'])
        ->where('fileName', '[A-Za-z0-9._\-]+')
        ->name('call-center.moh.play');
    Route::post('/moh/{className}/set-default', [MusicOnHoldController::class, 'setDefault'])
        ->name('call-center.moh.set-default');
    Route::post('/moh/reset-default', [MusicOnHoldController::class, 'resetDefault'])
        ->name('call-center.moh.reset-default');

    Route::get('/agent-console', [AgentConsoleController::class, 'index'])->name('call-center.agent-console');
    Route::post('/agent-console/login', [AgentConsoleController::class, 'login'])->name('call-center.agent-console.login');
    Route::post('/agent-console/logout', [AgentConsoleController::class, 'logout'])->name('call-center.agent-console.logout');
});



/*
|--------------------------------------------------------------------------
| Firewall
|--------------------------------------------------------------------------
*/
Route::get('/fail2ban', [FirewallController::class, 'fail2ban'])->middleware(['auth', 'permission:firewall'])->name('fail2ban.index');
Route::post('/fail2ban/unban', [FirewallController::class, 'fail2banUnban'])->middleware(['auth', 'permission:firewall'])->name('fail2ban.unban');

Route::prefix('firewall')->middleware(['auth', 'permission:firewall'])->group(function () {

    Route::get('/', function () {
        return redirect()->route('firewall.services');
    })->name('firewall.index');

    Route::get('/settings', [FirewallController::class, 'settings'])
        ->name('firewall.settings');

    Route::get('/services', [FirewallController::class, 'services'])
        ->name('firewall.services');

    Route::post('/services/store', [FirewallController::class, 'storeService'])
        ->name('firewall.services.store');

    // ?? Load Default Rules button
    Route::post('/services/defaults', [FirewallController::class, 'servicesDefaults'])
        ->name('firewall.services.defaults');

    // ?? NEW: Sync from iptables button (matches services.blade.php)
    Route::post('/services/sync', [FirewallController::class, 'syncFromIptables'])
        ->name('firewall.services.sync');

    Route::delete('/services/{id}', [FirewallController::class, 'destroyService'])
        ->name('firewall.services.destroy');

    Route::get('/access', [FirewallController::class, 'access'])
        ->name('firewall.access');

    Route::post('/access/store', [FirewallController::class, 'storeAccess'])
        ->name('firewall.access.store');

    Route::delete('/access/{id}', [FirewallController::class, 'destroyAccess'])
        ->name('firewall.access.delete');

    Route::delete('/access/{id}', [FirewallController::class, 'destroyAccess'])
        ->name('firewall.access.destroy');

    Route::post('/access/unban', [FirewallController::class, 'unbanIp'])
        ->name('firewall.access.unban');

    Route::get('/geo', [FirewallController::class, 'geo'])
        ->name('firewall.geo');

    Route::post('/geo', [FirewallController::class, 'storeGeo'])
        ->name('firewall.geo.store');

    Route::post('/geo/apply', [FirewallController::class, 'applyGeo'])
        ->name('firewall.geo.apply');

    Route::post('/geo/bulk', [FirewallController::class, 'bulkSaveGeo'])
        ->name('firewall.geo.bulk');

    Route::delete('/geo/{id}', [FirewallController::class, 'destroyGeo'])
        ->name('firewall.geo.destroy');

    // Rules tab
    Route::get('/rules', [FirewallController::class, 'rules'])
        ->name('firewall.rules');

    // Attack Monitor tab
    Route::get('/attacks', [SecurityController::class, 'attacks'])
        ->name('firewall.attacks');
});

/*
|--------------------------------------------------------------------------
| SIP Trunks
|--------------------------------------------------------------------------
*/

Route::prefix('trunks')->group(function () {

    // Temporarily disabled - TrunkController missing
    /*
    Route::get('/', [TrunkController::class, 'index'])
        ->name('trunks.index');

    Route::get('/create', [TrunkController::class, 'create'])
        ->name('trunks.create');

    Route::post('/', [TrunkController::class, 'store'])
        ->name('trunks.store');

    Route::get('/{id}/edit', [TrunkController::class, 'edit'])
        ->name('trunks.edit');

    Route::match(['post', 'put'], '/{id}/update', [TrunkController::class, 'update'])
        ->name('trunks.update');

    // ? NEW: Destroy route used by the Delete form
    Route::delete('/{id}', [TrunkController::class, 'destroy'])
        ->whereNumber('id')
        ->name('trunks.destroy');
    */

    /*
    |--------------------------------------------------------------------------
    | SIP Trunks
    |--------------------------------------------------------------------------
    */

    Route::get('/sip-trunks', [SipTrunkController::class, 'index'])
        ->name('trunks.sip-trunks.index');
    Route::get('/sip-trunks/create', [SipTrunkController::class, 'create'])
        ->name('trunks.sip-trunks.create');
    Route::post('/sip-trunks', [SipTrunkController::class, 'store'])
        ->name('trunks.sip-trunks.store');
    Route::get('/sip-trunks/{sipTrunk}/edit', [SipTrunkController::class, 'edit'])
        ->name('trunks.sip-trunks.edit');
    Route::put('/sip-trunks/{sipTrunk}', [SipTrunkController::class, 'update'])
        ->name('trunks.sip-trunks.update');
    Route::post('/sip-trunks/update/{sipTrunk}', function (Request $request, $sipTrunk) {
        \Log::info('DIRECT POST UPDATE ROUTE HIT', ['sipTrunk' => $sipTrunk, 'method' => $request->method()]);
        $controller = new \App\Http\Controllers\SipTrunkController();
        return $controller->update($request, $sipTrunk);
    })->name('trunks.sip-trunks.update-post');
    
    // Test route to verify POST works at all
    Route::post('/test-post', function (Request $request) {
        \Log::info('TEST POST ROUTE HIT', ['data' => $request->all()]);
        return response()->json(['success' => true, 'message' => 'POST works']);
    });
    Route::post('/sip-trunks/update/{sipTrunk}/test', function ($sipTrunk) {
        \Log::info('UPDATE PATTERN TEST HIT', ['sipTrunk' => $sipTrunk]);
        return response()->json(['test' => 'update pattern hit', 'sipTrunk' => $sipTrunk]);
    })->name('trunks.sip-trunks.update-test');
    Route::post('/sip-trunks/{sipTrunk}/test', function ($sipTrunk) {
        \Log::info('TEST POST ROUTE HIT', ['sipTrunk' => $sipTrunk]);
        return response()->json(['test' => 'hit', 'sipTrunk' => $sipTrunk]);
    })->name('trunks.sip-trunks.test');
    Route::delete('/sip-trunks/{sipTrunk}', [SipTrunkController::class, 'destroy'])
        ->name('trunks.sip-trunks.destroy');
    Route::post('/sip-trunks/{sipTrunk}/toggle', [SipTrunkController::class, 'toggle'])
        ->name('trunks.sip-trunks.toggle');
    Route::post('/sip-trunks/{sipTrunk}/clone', [SipTrunkController::class, 'clone'])
        ->name('trunks.sip-trunks.clone');
    Route::get('/sip-trunks/{sipTrunk}/export', [SipTrunkController::class, 'export'])
        ->name('trunks.sip-trunks.export');
    Route::get('/sip-trunks/{sipTrunk}/validate', [SipTrunkController::class, 'validateTrunk'])
        ->name('trunks.sip-trunks.validate');
    Route::post('/sip-trunks/import', [SipTrunkController::class, 'import'])
        ->name('trunks.sip-trunks.import');
    Route::post('/sip-trunks/bulk-toggle', [SipTrunkController::class, 'bulkToggle'])
        ->name('trunks.sip-trunks.bulk-toggle');
    Route::post('/sip-trunks/bulk-delete', [SipTrunkController::class, 'bulkDelete'])
        ->name('trunks.sip-trunks.bulk-delete');
    Route::get('/sip-trunks/health', [SipTrunkController::class, 'healthDashboard'])
        ->name('trunks.sip-trunks.health');
    Route::get('/sip-trunks/templates', [SipTrunkController::class, 'templates'])
        ->name('trunks.sip-trunks.templates');

    /*
    |--------------------------------------------------------------------------
    | Outbound Routes
    |--------------------------------------------------------------------------
    */

    Route::get('/outbound', [OutboundRouteController::class, 'index'])
        ->name('trunks.outbound');
    Route::get('/outbound/create', [OutboundRouteController::class, 'create'])
        ->name('trunks.outbound.create');
    Route::post('/outbound', [OutboundRouteController::class, 'store'])
        ->name('trunks.outbound.store');
    Route::get('/outbound/{outboundRoute}/edit', [OutboundRouteController::class, 'edit'])
        ->name('trunks.outbound.edit');
    Route::put('/outbound/{outboundRoute}', [OutboundRouteController::class, 'update'])
        ->name('trunks.outbound.update');
    Route::post('/outbound/{outboundRoute}/toggle', [OutboundRouteController::class, 'toggle'])
        ->name('trunks.outbound.toggle');
    Route::delete('/outbound/{outboundRoute}', [OutboundRouteController::class, 'destroy'])
        ->name('trunks.outbound.destroy');

    /*
    |--------------------------------------------------------------------------
    | Inbound Routes
    |--------------------------------------------------------------------------
    */

    Route::get('/inbound', [InboundRouteController::class, 'index'])
        ->name('trunks.inbound.index');

    Route::get('/inbound/create', [InboundRouteController::class, 'create'])
        ->name('trunks.inbound.create');

    Route::post('/inbound', [InboundRouteController::class, 'store'])
        ->name('trunks.inbound.store');

    Route::get('/inbound/{id}/edit', [InboundRouteController::class, 'edit'])
        ->name('trunks.inbound.edit');

    Route::put('/inbound/{id}', [InboundRouteController::class, 'update'])
        ->name('trunks.inbound.update');

    Route::post('/inbound/{id}/toggle', [InboundRouteController::class, 'toggle'])
        ->name('trunks.inbound.toggle');

    Route::delete('/inbound/{id}', [InboundRouteController::class, 'destroy'])
        ->name('trunks.inbound.destroy');

    Route::get('/teams', [TeamsConfigController::class, 'index'])
        ->name('trunks.teams.index');
    Route::put('/teams', [TeamsConfigController::class, 'update'])
        ->name('trunks.teams.update');
    Route::post('/teams/extensions', [TeamsConfigController::class, 'addExtension'])
        ->name('trunks.teams.addExtension');
    Route::delete('/teams/extensions/{id}', [TeamsConfigController::class, 'removeExtension'])
        ->name('trunks.teams.removeExtension');
    Route::get('/teams/certificates', [TeamsConfigController::class, 'certificates'])
        ->name('trunks.teams.certificates');
    Route::post('/teams/certificates', [TeamsConfigController::class, 'uploadCertificate'])
        ->name('trunks.teams.uploadCertificate');
    Route::post('/teams/certificates/{id}/default', [TeamsConfigController::class, 'setDefaultCertificate'])
        ->name('trunks.teams.setDefaultCertificate');
    Route::delete('/teams/certificates/{id}', [TeamsConfigController::class, 'deleteCertificate'])
        ->name('trunks.teams.deleteCertificate');
    Route::get('/teams/validate-connectivity', [TeamsConfigController::class, 'validateConnectivity'])
        ->name('trunks.teams.validateConnectivity');
    Route::get('/teams/call-statistics', [TeamsConfigController::class, 'callStatistics'])
        ->name('trunks.teams.callStatistics');
    Route::get('/teams/users-status', [TeamsConfigController::class, 'teamsUsersStatus'])
        ->name('trunks.teams.usersStatus');
});


/*
|--------------------------------------------------------------------------
| CDR (Call Detail Records)
|--------------------------------------------------------------------------
*/

Route::prefix('cdr')->middleware(['auth', 'permission:cdr'])->group(function () {
    Route::get('/', [CdrController::class, 'index'])
        ->name('cdr.index');

    Route::get('/live', [CdrController::class, 'live'])
        ->name('cdr.live');

    Route::get('/detail/{uniqueid}', [CdrController::class, 'detail'])
        ->name('cdr.detail');

    Route::get('/export/csv', [CdrController::class, 'exportCsv'])
        ->name('cdr.export.csv');

    Route::get('/export/xlsx', [CdrController::class, 'exportXlsx'])
        ->name('cdr.export.xlsx');

    Route::get('/export/pdf', [CdrController::class, 'exportPdf'])
        ->name('cdr.export.pdf');
});



/*
|--------------------------------------------------------------------------
| Applications (PBX Modules)
|--------------------------------------------------------------------------
*/

Route::prefix('applications')->middleware(['auth', 'permission:applications'])->group(function () {

    // Landing page
    Route::get('/', function () {
        return view('applications.index');
    })->name('applications.index');

    // Feature Codes
    Route::get('/feature-codes', [\App\Http\Controllers\FeatureCodeController::class, 'index'])->name('apps.feature-codes.index');
    Route::post('/feature-codes/{id}/update', [\App\Http\Controllers\FeatureCodeController::class, 'update'])->name('apps.feature-codes.update');
    Route::post('/feature-codes/{id}/toggle', [\App\Http\Controllers\FeatureCodeController::class, 'toggle'])->name('apps.feature-codes.toggle');
    Route::post('/feature-codes/sync', [\App\Http\Controllers\FeatureCodeController::class, 'sync'])->name('apps.feature-codes.sync');

    // Voice Prompts
    Route::get('/voice-prompts', [\App\Http\Controllers\VoicePromptController::class, 'index'])->name('apps.voice-prompts.index');
    Route::post('/voice-prompts', [\App\Http\Controllers\VoicePromptController::class, 'store'])->name('apps.voice-prompts.store');
    Route::get('/voice-prompts/play/{filename}', [\App\Http\Controllers\VoicePromptController::class, 'play'])->where('filename', '.*')->name('apps.voice-prompts.play');
    Route::delete('/voice-prompts/{filename}', [\App\Http\Controllers\VoicePromptController::class, 'destroy'])->where('filename', '.*')->name('apps.voice-prompts.destroy');

    /*
    |--------------------------------------------------------------------------
    | Time Groups (Controller-based CRUD)
    |--------------------------------------------------------------------------
    */

    /*
    |--------------------------------------------------------------------------
    | IVR (Interactive Voice Response)
    |--------------------------------------------------------------------------
    */
    Route::get('/ivrs', [\App\Http\Controllers\IvrController::class, 'index'])->name('ivrs.index');
    Route::get('/ivrs/create', [\App\Http\Controllers\IvrController::class, 'create'])->name('ivrs.create');
    Route::post('/ivrs', [\App\Http\Controllers\IvrController::class, 'store'])->name('ivrs.store');
    Route::get('/ivrs/{ivr}/edit', [\App\Http\Controllers\IvrController::class, 'edit'])->name('ivrs.edit');
    Route::put('/ivrs/{ivr}', [\App\Http\Controllers\IvrController::class, 'update'])->name('ivrs.update');
    Route::delete('/ivrs/{ivr}', [\App\Http\Controllers\IvrController::class, 'destroy'])->name('ivrs.destroy');

    Route::get('/timegroups', [TimeGroupController::class, 'index'])->name('applications.timegroups.index');
    Route::get('/timegroups/create', [TimeGroupController::class, 'create'])->name('applications.timegroups.create');
    Route::post('/timegroups', [TimeGroupController::class, 'store'])->name('applications.timegroups.store');
    Route::get('/timegroups/{timegroup}/edit', [TimeGroupController::class, 'edit'])->name('applications.timegroups.edit');
    Route::put('/timegroups/{timegroup}', [TimeGroupController::class, 'update'])->name('applications.timegroups.update');
    Route::delete('/timegroups/{timegroup}', [TimeGroupController::class, 'destroy'])->name('applications.timegroups.destroy');
    Route::post('/timegroups/{timegroup}/rules', [TimeGroupController::class, 'addRule'])->name('applications.timegroups.rules.add');
    Route::delete('/timegroups/{timegroup}/rules/{rule}', [TimeGroupController::class, 'deleteRule'])->name('applications.timegroups.rules.delete');

    /*
    |--------------------------------------------------------------------------
    | Remaining Applications (view-only for now)
    |--------------------------------------------------------------------------
    */

    Route::get('/timeconditions', [TimeConditionController::class, 'index'])->name('applications.timeconditions.index');
    Route::get('/timeconditions/create', [TimeConditionController::class, 'create'])->name('applications.timeconditions.create');
    Route::post('/timeconditions', [TimeConditionController::class, 'store'])->name('applications.timeconditions.store');
    Route::get('/timeconditions/{timecondition}/edit', [TimeConditionController::class, 'edit'])->name('applications.timeconditions.edit');
    Route::put('/timeconditions/{timecondition}', [TimeConditionController::class, 'update'])->name('applications.timeconditions.update');
    Route::delete('/timeconditions/{timecondition}', [TimeConditionController::class, 'destroy'])->name('applications.timeconditions.destroy');
    Route::post('/timeconditions/{timecondition}/test', [TimeConditionController::class, 'test'])->name('applications.timeconditions.test');
    Route::post('/timeconditions/{timecondition}/override', [TimeConditionController::class, 'override'])->name('applications.timeconditions.override');
    Route::post('/timeconditions/sync-all', [TimeConditionController::class, 'syncAll'])->name('applications.timeconditions.sync-all');

    // Enhanced Time Groups (Time Schedules)
    Route::post('/timegroups/{timegroup}/test', [TimeGroupController::class, 'test'])->name('applications.timegroups.test');
    Route::post('/timegroups/{timegroup}/duplicate', [TimeGroupController::class, 'duplicate'])->name('applications.timegroups.duplicate');

    // Holiday Calendars (New Structure)
    Route::get('/holiday-calendars', [\App\Http\Controllers\Applications\HolidayCalendarController::class, 'index'])->name('applications.holiday_calendars.index');
    Route::get('/holiday-calendars/create', [\App\Http\Controllers\Applications\HolidayCalendarController::class, 'create'])->name('applications.holiday_calendars.create');
    Route::post('/holiday-calendars', [\App\Http\Controllers\Applications\HolidayCalendarController::class, 'store'])->name('applications.holiday_calendars.store');
    Route::get('/holiday-calendars/{holidayCalendar}/edit', [\App\Http\Controllers\Applications\HolidayCalendarController::class, 'edit'])->name('applications.holiday_calendars.edit');
    Route::put('/holiday-calendars/{holidayCalendar}', [\App\Http\Controllers\Applications\HolidayCalendarController::class, 'update'])->name('applications.holiday_calendars.update');
    Route::delete('/holiday-calendars/{holidayCalendar}', [\App\Http\Controllers\Applications\HolidayCalendarController::class, 'destroy'])->name('applications.holiday_calendars.destroy');
    Route::post('/holiday-calendars/{holidayCalendar}/duplicate', [\App\Http\Controllers\Applications\HolidayCalendarController::class, 'duplicate'])->name('applications.holiday_calendars.duplicate');
    Route::post('/holiday-calendars/{holidayCalendar}/dates', [\App\Http\Controllers\Applications\HolidayCalendarController::class, 'storeDate'])->name('applications.holiday_calendars.dates.store');
    Route::delete('/holiday-calendars/{holidayCalendar}/dates/{date}', [\App\Http\Controllers\Applications\HolidayCalendarController::class, 'destroyDate'])->name('applications.holiday_calendars.dates.destroy');

    // Legacy Holidays (kept for backward compatibility)
    Route::get('/holidays', [HolidayController::class, 'index'])->name('applications.holidays.index');
    Route::get('/holidays/create', [HolidayController::class, 'create'])->name('applications.holidays.create');
    Route::post('/holidays', [HolidayController::class, 'store'])->name('applications.holidays.store');
    Route::get('/holidays/{holiday}/edit', [HolidayController::class, 'edit'])->name('applications.holidays.edit');
    Route::put('/holidays/{holiday}', [HolidayController::class, 'update'])->name('applications.holidays.update');
    Route::delete('/holidays/{holiday}', [HolidayController::class, 'destroy'])->name('applications.holidays.destroy');

    Route::get('/flowswitches', [FlowSwitchController::class, 'index'])->name('applications.flowswitches.index');
    Route::get('/flowswitches/create', [FlowSwitchController::class, 'create'])->name('applications.flowswitches.create');
    Route::post('/flowswitches', [FlowSwitchController::class, 'store'])->name('applications.flowswitches.store');
    Route::get('/flowswitches/{flowswitch}/edit', [FlowSwitchController::class, 'edit'])->name('applications.flowswitches.edit');
    Route::put('/flowswitches/{flowswitch}', [FlowSwitchController::class, 'update'])->name('applications.flowswitches.update');
    Route::delete('/flowswitches/{flowswitch}', [FlowSwitchController::class, 'destroy'])->name('applications.flowswitches.destroy');
    Route::post('/flowswitches/{flowswitch}/toggle', [FlowSwitchController::class, 'toggle'])->name('applications.flowswitches.toggle');

    // Module routes (existing controllers/views under resources/views/apps/*)
    Route::get('/ring-groups', [RingGroupController::class, 'index'])->name('apps.ring-groups.index');
    Route::get('/ring-groups/create', [RingGroupController::class, 'create'])->name('apps.ring-groups.create');
    Route::post('/ring-groups', [RingGroupController::class, 'store'])->name('apps.ring-groups.store');
    Route::get('/ring-groups/{id}/edit', [RingGroupController::class, 'edit'])->name('apps.ring-groups.edit');
    Route::put('/ring-groups/{id}', [RingGroupController::class, 'update'])->name('apps.ring-groups.update');
    Route::delete('/ring-groups/{id}', [RingGroupController::class, 'destroy'])->name('apps.ring-groups.destroy');
    Route::get('/ring-groups/export-dialplan', [RingGroupController::class, 'exportDialplan'])->name('apps.ring-groups.export.dialplan');

    Route::get('/speed-dials', [SpeedDialController::class, 'index'])->name('apps.speed-dials.index');
    Route::get('/speed-dials/create', [SpeedDialController::class, 'create'])->name('apps.speed-dials.create');
    Route::post('/speed-dials', [SpeedDialController::class, 'store'])->name('apps.speed-dials.store');
    Route::get('/speed-dials/{id}/edit', [SpeedDialController::class, 'edit'])->name('apps.speed-dials.edit');
    Route::put('/speed-dials/{id}', [SpeedDialController::class, 'update'])->name('apps.speed-dials.update');
    Route::delete('/speed-dials/{id}', [SpeedDialController::class, 'destroy'])->name('apps.speed-dials.destroy');

    Route::get('/pins', [PinController::class, 'index'])->name('apps.pins.index');
    Route::get('/pins/create', [PinController::class, 'create'])->name('apps.pins.create');
    Route::post('/pins', [PinController::class, 'store'])->name('apps.pins.store');
    Route::get('/pins/{id}/edit', [PinController::class, 'edit'])->name('apps.pins.edit');
    Route::put('/pins/{id}', [PinController::class, 'update'])->name('apps.pins.update');
    Route::delete('/pins/{id}', [PinController::class, 'destroy'])->name('apps.pins.destroy');
    Route::post('/pins/{id}/toggle', [PinController::class, 'toggle'])->name('apps.pins.toggle');

    /*
    |--------------------------------------------------------------------------
    | Departments
    |--------------------------------------------------------------------------
    */
    Route::get('/departments',                 [\App\Http\Controllers\DepartmentController::class, 'index'])->name('applications.departments.index');
    Route::get('/departments/create',          [\App\Http\Controllers\DepartmentController::class, 'create'])->name('applications.departments.create');
    Route::post('/departments',                [\App\Http\Controllers\DepartmentController::class, 'store'])->name('applications.departments.store');
    Route::get('/departments/{department}',    [\App\Http\Controllers\DepartmentController::class, 'show'])->name('applications.departments.show');
    Route::get('/departments/{department}/edit', [\App\Http\Controllers\DepartmentController::class, 'edit'])->name('applications.departments.edit');
    Route::put('/departments/{department}',    [\App\Http\Controllers\DepartmentController::class, 'update'])->name('applications.departments.update');
    Route::delete('/departments/{department}', [\App\Http\Controllers\DepartmentController::class, 'destroy'])->name('applications.departments.destroy');

    /*
    |--------------------------------------------------------------------------
    | Phonebook (Internal & External Contacts)
    |--------------------------------------------------------------------------
    */
    Route::get('/phonebook',                [\App\Http\Controllers\PhonebookController::class, 'index'])->name('phonebook.index');
    Route::get('/phonebook/recent',         [\App\Http\Controllers\PhonebookController::class, 'recent'])->name('phonebook.recent');
    Route::post('/phonebook/quick-add',     [\App\Http\Controllers\PhonebookController::class, 'quickAdd'])->name('phonebook.quick-add');
    Route::get('/phonebook/export',         [\App\Http\Controllers\PhonebookController::class, 'export'])->name('phonebook.export');
    Route::post('/phonebook/import',        [\App\Http\Controllers\PhonebookController::class, 'import'])->name('phonebook.import');
    Route::get('/phonebook/create',         [\App\Http\Controllers\PhonebookController::class, 'create'])->name('phonebook.create');
    Route::post('/phonebook',               [\App\Http\Controllers\PhonebookController::class, 'store'])->name('phonebook.store');
    Route::get('/phonebook/{phonebook}/edit', [\App\Http\Controllers\PhonebookController::class, 'edit'])->name('phonebook.edit');
    Route::put('/phonebook/{phonebook}',    [\App\Http\Controllers\PhonebookController::class, 'update'])->name('phonebook.update');
    Route::delete('/phonebook/{phonebook}', [\App\Http\Controllers\PhonebookController::class, 'destroy'])->name('phonebook.destroy');
    Route::post('/phonebook/{phonebook}/block', [\App\Http\Controllers\PhonebookController::class, 'toggleBlock'])->name('phonebook.toggle-block');

    // Phonebook management (manage phonebook groups)
    Route::get('/phonebooks/manage',            [\App\Http\Controllers\PhonebookController::class, 'manageBooks'])->name('phonebooks.manage');
    Route::post('/phonebooks/manage',           [\App\Http\Controllers\PhonebookController::class, 'storeBook'])->name('phonebooks.store');
    Route::put('/phonebooks/manage/{id}',       [\App\Http\Controllers\PhonebookController::class, 'updateBook'])->name('phonebooks.update');
    Route::delete('/phonebooks/manage/{id}',    [\App\Http\Controllers\PhonebookController::class, 'destroyBook'])->name('phonebooks.destroy');

    Route::get('/pickup-groups', [PickupGroupController::class, 'index'])->name('apps.pickup-groups.index');
    Route::get('/pickup-groups/create', [PickupGroupController::class, 'create'])->name('apps.pickup-groups.create');
    Route::post('/pickup-groups', [PickupGroupController::class, 'store'])->name('apps.pickup-groups.store');
    Route::get('/pickup-groups/{id}/edit', [PickupGroupController::class, 'edit'])->name('apps.pickup-groups.edit');
    Route::put('/pickup-groups/{id}', [PickupGroupController::class, 'update'])->name('apps.pickup-groups.update');
    Route::delete('/pickup-groups/{id}', [PickupGroupController::class, 'destroy'])->name('apps.pickup-groups.destroy');
    Route::post('/pickup-groups/sync', [PickupGroupController::class, 'syncEndpoints'])->name('apps.pickup-groups.sync');

    /*
    |--------------------------------------------------------------------------
    | Device Management
    |--------------------------------------------------------------------------
    */
    // Device routes moved to api.php to avoid route registration issues
    /*
    Route::get('/extensions/{extension}/device', [DeviceController::class, 'show'])->name('extensions.device.show');
    Route::put('/extensions/{extension}/device', [DeviceController::class, 'update'])->name('extensions.device.update');
    Route::post('/extensions/{extension}/device/reboot', [DeviceController::class, 'reboot'])->name('extensions.device.reboot');
    Route::post('/extensions/{extension}/device/ping', [DeviceController::class, 'ping'])->name('extensions.device.ping');
    Route::get('/extensions/{extension}/device/gui', [DeviceController::class, 'gui'])->name('extensions.device.gui');
    Route::post('/extensions/{extension}/device/sync', [DeviceController::class, 'sync'])->name('extensions.device.sync');
    */
});

/*
|--------------------------------------------------------------------------
| Device Provisioning (Public - No Auth Required)
|--------------------------------------------------------------------------
*/
Route::prefix('provisioning')->group(function () {
    // Test route for provisioning verification
    Route::get('/test.cfg', function () {
        return response(
            "#!version:1.0.0.1\n" .
            "account.1.enable = 1\n" .
            "account.1.label = Test\n" .
            "static.auto_provision.power_on = 1"
        );
    });
});

/*
|--------------------------------------------------------------------------
| Public Device Provisioning (No Auth - Devices Access These)
|--------------------------------------------------------------------------
*/
Route::prefix('provision')->group(function () {
    Route::get('/yealink/{mac}.cfg', [ProvisioningController::class, 'getConfig']);
    Route::get('/fanvil/{mac}.cfg', [ProvisioningController::class, 'getConfig']);
    Route::get('/grandstream/cfg{mac}.xml', [ProvisioningController::class, 'getConfig']);
    Route::get('/polycom/{mac}.xml', [ProvisioningController::class, 'getConfig']);
});


/*
|--------------------------------------------------------------------------
| Outbound Campaign Dialler ("Automatic Calling")
|--------------------------------------------------------------------------
| Gated by the per-tenant feature flag (dialer.enabled) and the dialer
| permission. Phase 1A registers the skeleton; controllers are fleshed out
| in later phases. Nothing here places a call.
*/
Route::prefix('dialer')
    ->middleware(['web', 'auth', 'dialer.enabled', 'permission:dialer'])
    ->name('dialer.')
    ->group(function () {
        Route::get('/dashboard', [\App\Http\Controllers\Dialer\DashboardController::class, 'index'])->name('dashboard');

        Route::get('/campaigns', [\App\Http\Controllers\Dialer\CampaignController::class, 'index'])->name('campaigns.index');
        Route::get('/campaigns/new', [\App\Http\Controllers\Dialer\CampaignController::class, 'create'])->name('campaigns.create');
        Route::post('/campaigns', [\App\Http\Controllers\Dialer\CampaignController::class, 'store'])->name('campaigns.store');
        Route::get('/campaigns/{id}', [\App\Http\Controllers\Dialer\CampaignController::class, 'show'])->whereNumber('id')->name('campaigns.show');
        Route::get('/campaigns/{id}/edit', [\App\Http\Controllers\Dialer\CampaignController::class, 'edit'])->whereNumber('id')->name('campaigns.edit');
        Route::put('/campaigns/{id}', [\App\Http\Controllers\Dialer\CampaignController::class, 'update'])->whereNumber('id')->name('campaigns.update');
        Route::post('/campaigns/{id}/contacts/import', [\App\Http\Controllers\Dialer\CampaignController::class, 'importContacts'])->whereNumber('id')->name('campaigns.import');
        Route::post('/campaigns/{id}/contacts/import/confirm', [\App\Http\Controllers\Dialer\CampaignController::class, 'confirmImport'])->whereNumber('id')->name('campaigns.import.confirm');
        Route::post('/campaigns/{id}/contacts/import/cancel', [\App\Http\Controllers\Dialer\CampaignController::class, 'cancelImport'])->whereNumber('id')->name('campaigns.import.cancel');
        Route::post('/campaigns/{id}/start', [\App\Http\Controllers\Dialer\CampaignController::class, 'start'])->whereNumber('id')->name('campaigns.start');
        Route::post('/campaigns/{id}/pause', [\App\Http\Controllers\Dialer\CampaignController::class, 'pause'])->whereNumber('id')->name('campaigns.pause');
        Route::post('/campaigns/{id}/resume', [\App\Http\Controllers\Dialer\CampaignController::class, 'resume'])->whereNumber('id')->name('campaigns.resume');
        Route::post('/campaigns/{id}/stop', [\App\Http\Controllers\Dialer\CampaignController::class, 'stop'])->whereNumber('id')->name('campaigns.stop');
        Route::post('/campaigns/{id}/reset', [\App\Http\Controllers\Dialer\CampaignController::class, 'reset'])->whereNumber('id')->name('campaigns.reset');

        Route::get('/live', [\App\Http\Controllers\Dialer\LiveMonitorController::class, 'index'])->name('live');
        Route::get('/agent', [\App\Http\Controllers\Dialer\AgentController::class, 'index'])->name('agent');
        Route::post('/agent/device', [\App\Http\Controllers\Dialer\AgentController::class, 'selectDevice'])->name('agent.device');
        Route::post('/agent/call', [\App\Http\Controllers\Dialer\AgentController::class, 'call'])->name('agent.call');
        Route::post('/agent/available', [\App\Http\Controllers\Dialer\AgentController::class, 'setStatus'])->defaults('status', 'available')->name('agent.available');
        Route::post('/agent/pause', [\App\Http\Controllers\Dialer\AgentController::class, 'setStatus'])->defaults('status', 'paused')->name('agent.pause');
        Route::post('/agent/offline', [\App\Http\Controllers\Dialer\AgentController::class, 'setStatus'])->defaults('status', 'offline')->name('agent.offline');
        Route::get('/callbacks', [\App\Http\Controllers\Dialer\CallbackController::class, 'index'])->name('callbacks');
        Route::get('/reports', [\App\Http\Controllers\Dialer\ReportController::class, 'index'])->name('reports');
        Route::get('/do-not-call', [\App\Http\Controllers\Dialer\DoNotCallController::class, 'index'])->name('dnc');
        Route::post('/do-not-call', [\App\Http\Controllers\Dialer\DoNotCallController::class, 'store'])->name('dnc.store');
        Route::delete('/do-not-call/{id}', [\App\Http\Controllers\Dialer\DoNotCallController::class, 'destroy'])->whereNumber('id')->name('dnc.destroy');

        // Settings + feature flag + kill switch (administrator only, enforced in controller)
        Route::get('/settings', [\App\Http\Controllers\Dialer\SettingsController::class, 'index'])->name('settings');
        Route::put('/settings', [\App\Http\Controllers\Dialer\SettingsController::class, 'update'])->name('settings.update');
        Route::post('/settings/flag', [\App\Http\Controllers\Dialer\SettingsController::class, 'toggleFlag'])->name('settings.flag');
        Route::post('/settings/kill-switch', [\App\Http\Controllers\Dialer\SettingsController::class, 'killSwitch'])->name('settings.kill');
    });

// Live data endpoints for the dialler (same gating as the web routes)
Route::prefix('api/dialer')
    ->middleware(['web', 'auth', 'dialer.enabled', 'permission:dialer'])
    ->name('dialer.api.')
    ->group(function () {
        Route::get('/campaigns/{id}/live-summary', [\App\Http\Controllers\Dialer\LiveMonitorController::class, 'liveSummary'])->whereNumber('id')->name('live-summary');
    });


/*
|--------------------------------------------------------------------------
| DECT Management
|--------------------------------------------------------------------------
*/

Route::middleware(['web', 'auth'])->prefix('dect')->name('dect.')->group(function () {
    Route::get('/dashboard', [\App\Http\Controllers\Dect\DectDashboardController::class, 'index'])->name('dashboard.index');
    Route::get('/systems', [\App\Http\Controllers\Dect\DectSystemController::class, 'index'])->name('systems.index');
    Route::get('/systems/create', [\App\Http\Controllers\Dect\DectSystemController::class, 'create'])->name('systems.create');
    Route::post('/systems', [\App\Http\Controllers\Dect\DectSystemController::class, 'store'])->name('systems.store');
    Route::get('/systems/{id}', [\App\Http\Controllers\Dect\DectSystemController::class, 'show'])->name('systems.show');
    Route::get('/systems/{id}/edit', [\App\Http\Controllers\Dect\DectSystemController::class, 'edit'])->name('systems.edit');
    Route::put('/systems/{id}', [\App\Http\Controllers\Dect\DectSystemController::class, 'update'])->name('systems.update');
    Route::delete('/systems/{id}', [\App\Http\Controllers\Dect\DectSystemController::class, 'destroy'])->name('systems.destroy');
    Route::get('/base-stations', [\App\Http\Controllers\Dect\DectBaseStationController::class, 'index'])->name('base-stations.index');
    Route::get('/base-stations/create', [\App\Http\Controllers\Dect\DectBaseStationController::class, 'create'])->name('base-stations.create');
    Route::post('/base-stations', [\App\Http\Controllers\Dect\DectBaseStationController::class, 'store'])->name('base-stations.store');
    Route::get('/base-stations/{id}', [\App\Http\Controllers\Dect\DectBaseStationController::class, 'show'])->name('base-stations.show');
    Route::get('/base-stations/{id}/edit', [\App\Http\Controllers\Dect\DectBaseStationController::class, 'edit'])->name('base-stations.edit');
    Route::put('/base-stations/{id}', [\App\Http\Controllers\Dect\DectBaseStationController::class, 'update'])->name('base-stations.update');
    Route::delete('/base-stations/{id}', [\App\Http\Controllers\Dect\DectBaseStationController::class, 'destroy'])->name('base-stations.destroy');
    Route::get('/handsets', [\App\Http\Controllers\Dect\DectHandsetController::class, 'index'])->name('handsets.index');
    Route::get('/handsets/create', [\App\Http\Controllers\Dect\DectHandsetController::class, 'create'])->name('handsets.create');
    Route::post('/handsets', [\App\Http\Controllers\Dect\DectHandsetController::class, 'store'])->name('handsets.store');
    Route::get('/handsets/{id}', [\App\Http\Controllers\Dect\DectHandsetController::class, 'show'])->name('handsets.show');
    Route::get('/handsets/{id}/edit', [\App\Http\Controllers\Dect\DectHandsetController::class, 'edit'])->name('handsets.edit');
    Route::put('/handsets/{id}', [\App\Http\Controllers\Dect\DectHandsetController::class, 'update'])->name('handsets.update');
    Route::delete('/handsets/{id}', [\App\Http\Controllers\Dect\DectHandsetController::class, 'destroy'])->name('handsets.destroy');
    Route::post('/handsets/{id}/unlink', [\App\Http\Controllers\Dect\DectHandsetController::class, 'unlink'])->name('handsets.unlink');
    Route::get('/provisioning', [\App\Http\Controllers\Dect\DectProvisioningController::class, 'index'])->name('provisioning.index');
    Route::get('/provisioning/create', [\App\Http\Controllers\Dect\DectProvisioningController::class, 'create'])->name('provisioning.create');
    Route::post('/provisioning', [\App\Http\Controllers\Dect\DectProvisioningController::class, 'store'])->name('provisioning.store');
    Route::get('/provisioning/{id}', [\App\Http\Controllers\Dect\DectProvisioningController::class, 'show'])->name('provisioning.show');
    Route::get('/provisioning/{id}/edit', [\App\Http\Controllers\Dect\DectProvisioningController::class, 'edit'])->name('provisioning.edit');
    Route::put('/provisioning/{id}', [\App\Http\Controllers\Dect\DectProvisioningController::class, 'update'])->name('provisioning.update');
    Route::delete('/provisioning/{id}', [\App\Http\Controllers\Dect\DectProvisioningController::class, 'destroy'])->name('provisioning.destroy');
    Route::get('/firmware', [\App\Http\Controllers\Dect\DectFirmwareController::class, 'index'])->name('firmware.index');
    Route::get('/firmware/create', [\App\Http\Controllers\Dect\DectFirmwareController::class, 'create'])->name('firmware.create');
    Route::post('/firmware', [\App\Http\Controllers\Dect\DectFirmwareController::class, 'store'])->name('firmware.store');
    Route::get('/firmware/{id}', [\App\Http\Controllers\Dect\DectFirmwareController::class, 'show'])->name('firmware.show');
    Route::get('/firmware/{id}/edit', [\App\Http\Controllers\Dect\DectFirmwareController::class, 'edit'])->name('firmware.edit');
    Route::put('/firmware/{id}', [\App\Http\Controllers\Dect\DectFirmwareController::class, 'update'])->name('firmware.update');
    Route::delete('/firmware/{id}', [\App\Http\Controllers\Dect\DectFirmwareController::class, 'destroy'])->name('firmware.destroy');
    Route::get('/monitoring', [\App\Http\Controllers\Dect\DectMonitoringController::class, 'index'])->name('monitoring.index');
    Route::get('/alerts', [\App\Http\Controllers\Dect\DectAlertController::class, 'index'])->name('alerts.index');
    Route::get('/alerts/{id}', [\App\Http\Controllers\Dect\DectAlertController::class, 'show'])->name('alerts.show');
    Route::post('/alerts/{id}/acknowledge', [\App\Http\Controllers\Dect\DectAlertController::class, 'acknowledge'])->name('alerts.acknowledge');
    Route::post('/alerts/{id}/resolve', [\App\Http\Controllers\Dect\DectAlertController::class, 'resolve'])->name('alerts.resolve');
});

/*
|--------------------------------------------------------------------------
| Authentication
|--------------------------------------------------------------------------
*/

require __DIR__ . '/auth.php';
