<?php
declare(strict_types=1);
use App\Controllers\ActivityLogController;use App\Controllers\AuthController;use App\Controllers\DashboardController;use App\Controllers\RoleController;use App\Controllers\UserController;
use App\Controllers\ThirdPartyController;
use App\Controllers\ProductController;use App\Controllers\CatalogController;
use App\Controllers\StockController;use App\Controllers\WarehouseController;
use App\Controllers\PurchaseController;
use App\Controllers\QuoteController;
use App\Controllers\OrderController;
use App\Controllers\DeliveryController;
use App\Controllers\OrderStockTransitionController;
use App\Controllers\DeliveryFinalizeController;
use App\Controllers\InvoiceController;
use App\Controllers\PaymentController;
use App\Controllers\FinanceController;
use App\Controllers\SettingsController;
use App\Controllers\ReportController;
use App\Controllers\CheckController;
use App\Controllers\CreditNoteController;
use App\Controllers\BackupController;
use App\Controllers\DepositInvoiceController;
use App\Controllers\RecurringInvoiceController;
use App\Controllers\InvoiceCommunicationController;
use App\Controllers\InvoiceValidationController;
use App\Controllers\InvoiceOperationController;
use App\Controllers\InvoicePdfController;
use App\Controllers\QuoteInvoiceController;
use App\Controllers\DeliveryBatchInvoiceController;
use App\Controllers\ExpenseController;
use App\Controllers\BankReconciliationController;
$r=app()->router();
$r->get('/login',[AuthController::class,'showLogin'],['guest']);
$r->post('/login',[AuthController::class,'login'],['guest','csrf']);
$r->post('/logout',[AuthController::class,'logout'],['auth','csrf']);
$r->get('/dashboard',[DashboardController::class,'index'],['auth','permission:dashboard.view']);
$r->get('/profile',[DashboardController::class,'profile'],['auth']);
$r->post('/profile/password',[AuthController::class,'changePassword'],['auth','csrf']);
$r->get('/users',[UserController::class,'index'],['auth','permission:users.view']);
$r->get('/users/create',[UserController::class,'create'],['auth','permission:users.create']);
$r->post('/users',[UserController::class,'store'],['auth','permission:users.create','csrf']);
$r->get('/users/{id}/edit',[UserController::class,'edit'],['auth','permission:users.edit']);
$r->post('/users/{id}/update',[UserController::class,'update'],['auth','permission:users.edit','csrf']);
$r->post('/users/{id}/toggle',[UserController::class,'toggle'],['auth','permission:users.edit','csrf']);
$r->post('/users/{id}/reset-password',[UserController::class,'resetPassword'],['auth','permission:users.edit','csrf']);
$r->get('/roles',[RoleController::class,'index'],['auth','permission:roles.view']);
$r->get('/roles/create',[RoleController::class,'create'],['auth','permission:roles.create']);
$r->post('/roles',[RoleController::class,'store'],['auth','permission:roles.create','csrf']);
$r->get('/roles/{id}/edit',[RoleController::class,'edit'],['auth','permission:roles.edit']);
$r->post('/roles/{id}/update',[RoleController::class,'update'],['auth','permission:roles.edit','csrf']);
$r->post('/roles/{id}/toggle',[RoleController::class,'toggle'],['auth','permission:roles.edit','csrf']);
$r->get('/activity-logs',[ActivityLogController::class,'index'],['auth','permission:activity_logs.view']);
foreach(['customers','suppliers'] as $base){
 $module=$base;
 $r->get('/'.$base,[ThirdPartyController::class,'index'],['auth','permission:'.$module.'.view']);
 $r->get('/'.$base.'/create',[ThirdPartyController::class,'create'],['auth','permission:'.$module.'.create']);
 $r->post('/'.$base,[ThirdPartyController::class,'store'],['auth','permission:'.$module.'.create','csrf']);
 $r->get('/'.$base.'/categories',[ThirdPartyController::class,'categories'],['auth','permission:'.$module.'.view']);
 $r->post('/'.$base.'/categories',[ThirdPartyController::class,'saveCategory'],['auth','permission:'.$module.'.update','csrf']);
 $r->post('/'.$base.'/numbering',[ThirdPartyController::class,'saveNumbering'],['auth','permission:'.$module.'.update','csrf']);
 $r->post('/'.$base.'/categories/{categoryId}/toggle',[ThirdPartyController::class,'toggleCategory'],['auth','permission:'.$module.'.update','csrf']);
 $r->get('/'.$base.'/import',[ThirdPartyController::class,'importForm'],['auth','permission:'.$module.'.import']);
 $r->get('/'.$base.'/import/template',[ThirdPartyController::class,'template'],['auth','permission:'.$module.'.import']);
 $r->post('/'.$base.'/import/preview',[ThirdPartyController::class,'previewImport'],['auth','permission:'.$module.'.import','csrf']);
 $r->post('/'.$base.'/import/confirm',[ThirdPartyController::class,'confirmImport'],['auth','permission:'.$module.'.import','csrf']);
 $r->get('/'.$base.'/export/{format}',[ThirdPartyController::class,'export'],['auth','permission:'.$module.'.export']);
 $r->get('/'.$base.'/{id}',[ThirdPartyController::class,'show'],['auth','permission:'.$module.'.view']);
 $r->get('/'.$base.'/{id}/edit',[ThirdPartyController::class,'edit'],['auth','permission:'.$module.'.update']);
 $r->post('/'.$base.'/{id}/update',[ThirdPartyController::class,'update'],['auth','permission:'.$module.'.update','csrf']);
 $r->post('/'.$base.'/{id}/status',[ThirdPartyController::class,'status'],['auth','permission:'.$module.'.archive','csrf']);
 $r->post('/'.$base.'/{id}/addresses',[ThirdPartyController::class,'addAddress'],['auth','permission:'.$module.'.update','csrf']);
 $r->get('/'.$base.'/{id}/addresses/{childId}/edit',[ThirdPartyController::class,'editChild'],['auth','permission:'.$module.'.update']);
 $r->post('/'.$base.'/{id}/addresses/{childId}/update',[ThirdPartyController::class,'updateChild'],['auth','permission:'.$module.'.update','csrf']);
 $r->post('/'.$base.'/{id}/contacts',[ThirdPartyController::class,'addContact'],['auth','permission:'.$module.'.update','csrf']);
 $r->get('/'.$base.'/{id}/contacts/{childId}/edit',[ThirdPartyController::class,'editChild'],['auth','permission:'.$module.'.update']);
 $r->post('/'.$base.'/{id}/contacts/{childId}/update',[ThirdPartyController::class,'updateChild'],['auth','permission:'.$module.'.update','csrf']);
 $r->post('/'.$base.'/{id}/contacts/{childId}/toggle',[ThirdPartyController::class,'toggleContact'],['auth','permission:'.$module.'.update','csrf']);
 $r->post('/'.$base.'/{id}/notes',[ThirdPartyController::class,'addNote'],['auth','permission:'.$module.'.manage_notes','csrf']);
 $r->post('/'.$base.'/{id}/documents',[ThirdPartyController::class,'uploadDocument'],['auth','permission:'.$module.'.manage_documents','csrf']);
 $r->get('/'.$base.'/{id}/documents/{documentId}',[ThirdPartyController::class,'downloadDocument'],['auth','permission:'.$module.'.view']);
 $r->post('/'.$base.'/{id}/documents/{documentId}/delete',[ThirdPartyController::class,'deleteDocument'],['auth','permission:'.$module.'.manage_documents','csrf']);
}
$r->get('/products',[ProductController::class,'index'],['auth','permission:products.view']);
$r->get('/products/create',[ProductController::class,'create'],['auth','permission:products.create']);
$r->get('/products/import',[ProductController::class,'importForm'],['auth','permission:products.import']);
$r->get('/products/import/template',[ProductController::class,'template'],['auth','permission:products.import']);
$r->post('/products/import/preview',[ProductController::class,'previewImport'],['auth','permission:products.import','csrf']);
$r->post('/products/import/confirm',[ProductController::class,'confirmImport'],['auth','permission:products.import','csrf']);
$r->post('/products',[ProductController::class,'store'],['auth','permission:products.create','csrf']);
$r->get('/products/export/{format}',[ProductController::class,'export'],['auth','permission:products.export']);
$r->get('/products/{id}',[ProductController::class,'show'],['auth','permission:products.view']);
$r->get('/products/{id}/edit',[ProductController::class,'edit'],['auth','permission:products.update']);
$r->post('/products/{id}/update',[ProductController::class,'update'],['auth','permission:products.update','csrf']);
$r->post('/products/{id}/status',[ProductController::class,'status'],['auth','permission:products.archive','csrf']);
$r->post('/products/{id}/duplicate',[ProductController::class,'duplicate'],['auth','permission:products.create','csrf']);
$r->post('/products/{id}/related/{kind}',[ProductController::class,'addRelated'],['auth','permission:products.update','csrf']);
$r->post('/products/{id}/files',[ProductController::class,'upload'],['auth','permission:products.manage_documents','csrf']);
$r->get('/products/{id}/files/{fileId}',[ProductController::class,'download'],['auth','permission:products.view']);
foreach(['categories'=>'categories.update','brands'=>'brands.update','units'=>'units.manage','tax-rates'=>'tax_rates.manage','price-levels'=>'products.manage_prices']as$section=>$permission){
 $viewPermission=match($section){'categories'=>'categories.view','brands'=>'brands.view','units'=>'units.view','tax-rates'=>'tax_rates.view',default=>'products.view'};
 $r->get('/catalog/'.$section,[CatalogController::class,'index'],['auth','permission:'.$viewPermission]);
 $r->post('/catalog/'.$section,[CatalogController::class,'save'],['auth','permission:'.$permission,'csrf']);
 $r->post('/catalog/'.$section.'/{id}/toggle',[CatalogController::class,'toggle'],['auth','permission:'.$permission,'csrf']);
}
$r->get('/stock',[StockController::class,'dashboard'],['auth','permission:stock.view']);
$r->get('/stock/movement/{mode}',[StockController::class,'movementForm'],['auth','permission:stock.create']);
$r->post('/stock/movement/{mode}',[StockController::class,'movement'],['auth','permission:stock.create','csrf']);
$r->get('/stock/transfer',[StockController::class,'transferForm'],['auth','permission:stock.transfer']);
$r->post('/stock/transfer',[StockController::class,'transfer'],['auth','permission:stock.transfer','csrf']);
$r->get('/stock/inventory',[StockController::class,'inventoryForm'],['auth','permission:stock.inventory']);
$r->post('/stock/inventory',[StockController::class,'inventory'],['auth','permission:stock.inventory','csrf']);
$r->get('/stock/history',[StockController::class,'history'],['auth','permission:stock.history']);
$r->post('/stock/settings',[StockController::class,'settings'],['auth','permission:stock.update','csrf']);
$r->get('/stock/export/{format}',[StockController::class,'export'],['auth','permission:stock.export']);
$r->get('/warehouses',[WarehouseController::class,'index'],['auth','permission:warehouse.view']);
$r->post('/warehouses',[WarehouseController::class,'save'],['auth','permission:warehouse.create','csrf']);
$r->post('/warehouses/{id}/status',[WarehouseController::class,'status'],['auth','permission:warehouse.archive','csrf']);
$r->get('/purchases',[PurchaseController::class,'dashboard'],['auth','permission:purchases.view']);
$r->get('/purchases/{type}',[PurchaseController::class,'list'],['auth','permission:purchases.view']);
$r->get('/purchases/create/{type}',[PurchaseController::class,'form'],['auth','permission:purchases.create']);
$r->post('/purchases/create/{type}',[PurchaseController::class,'create'],['auth','permission:purchases.create','csrf']);
$r->post('/purchases/{type}/{id}/status',[PurchaseController::class,'status'],['auth','permission:purchases.validate','csrf']);
$r->get('/purchases/orders/{id}/receive',[PurchaseController::class,'receiveForm'],['auth','permission:purchases.receive']);
$r->post('/purchases/orders/{id}/receive',[PurchaseController::class,'receive'],['auth','permission:purchases.receive','csrf']);
$r->get('/purchases/orders/{id}/invoice',[PurchaseController::class,'invoiceForm'],['auth','permission:purchases.invoice']);
$r->post('/purchases/orders/{id}/invoice',[PurchaseController::class,'invoice'],['auth','permission:purchases.invoice','csrf']);
$r->post('/purchases/invoices/{id}/pay',[PurchaseController::class,'pay'],['auth','permission:purchases.payment','csrf']);
$r->get('/purchases/export/{type}/{format}',[PurchaseController::class,'export'],['auth','permission:purchases.export']);
$r->get('/quotes',[QuoteController::class,'index'],['auth','permission:quotes.view']);
$r->get('/quotes/create',[QuoteController::class,'form'],['auth','permission:quotes.create']);
$r->post('/quotes',[QuoteController::class,'save'],['auth','permission:quotes.create','csrf']);
$r->get('/quotes/{id}',[QuoteController::class,'show'],['auth','permission:quotes.view']);
$r->get('/quotes/{id}/edit',[QuoteController::class,'form'],['auth','permission:quotes.update']);
$r->post('/quotes/{id}/update',[QuoteController::class,'save'],['auth','permission:quotes.update','csrf']);
$r->post('/quotes/{id}/status/{status}',[QuoteController::class,'transition'],['auth','permission:quotes.validate','csrf']);
$r->post('/quotes/{id}/duplicate',[QuoteController::class,'duplicate'],['auth','permission:quotes.duplicate','csrf']);
$r->get('/quotes/{id}/pdf',[QuoteController::class,'pdf'],['auth','permission:quotes.print']);
$r->get('/orders',[OrderController::class,'index'],['auth','permission:orders.view']);
$r->get('/orders/create',[OrderController::class,'form'],['auth','permission:orders.create']);
$r->post('/orders',[OrderController::class,'save'],['auth','permission:orders.create','csrf']);
$r->get('/orders/export/{format}',[OrderController::class,'export'],['auth','permission:orders.export']);
$r->post('/orders/from-quote/{quoteId}',[OrderController::class,'fromQuote'],['auth','permission:orders.create','csrf']);
$r->get('/orders/{id}',[OrderController::class,'show'],['auth','permission:orders.view']);
$r->get('/orders/{id}/edit',[OrderController::class,'form'],['auth','permission:orders.update']);
$r->post('/orders/{id}/update',[OrderController::class,'save'],['auth','permission:orders.update','csrf']);
$r->post('/orders/{id}/duplicate',[OrderController::class,'duplicate'],['auth','permission:orders.create','csrf']);
$r->post('/orders/{id}/status/{status}',[OrderStockTransitionController::class,'transition'],['auth','permission:orders.validate','csrf']);
$r->post('/orders/{id}/prepare',[OrderController::class,'prepare'],['auth','permission:orders.prepare','csrf']);
$r->get('/orders/{id}/pdf',[OrderController::class,'pdf'],['auth','permission:orders.print']);
$r->post('/orders/{id}/attachments',[OrderController::class,'upload'],['auth','permission:orders.manage_attachments','csrf']);
$r->get('/orders/{id}/attachments/{attachmentId}',[OrderController::class,'download'],['auth','permission:orders.view']);
$r->post('/orders/{id}/attachments/{attachmentId}/delete',[OrderController::class,'deleteAttachment'],['auth','permission:orders.manage_attachments','csrf']);
$r->get('/deliveries',[DeliveryController::class,'index'],['auth','permission:deliveries.view']);
$r->get('/deliveries/export/{format}',[DeliveryController::class,'export'],['auth','permission:deliveries.export']);
$r->post('/deliveries/from-order/{orderId}',[DeliveryController::class,'fromOrder'],['auth','permission:deliveries.create','csrf']);
$r->get('/deliveries/{id}',[DeliveryController::class,'show'],['auth','permission:deliveries.view']);
$r->get('/deliveries/{id}/edit',[DeliveryController::class,'edit'],['auth','permission:deliveries.update']);
$r->post('/deliveries/{id}/update',[DeliveryController::class,'update'],['auth','permission:deliveries.update','csrf']);
$r->post('/deliveries/{id}/prepare',[DeliveryController::class,'prepare'],['auth','permission:deliveries.prepare','csrf']);
$r->post('/deliveries/{id}/validate',[DeliveryFinalizeController::class,'validate'],['auth','permission:deliveries.validate','csrf']);
$r->get('/deliveries/{id}/pdf',[DeliveryController::class,'pdf'],['auth','permission:deliveries.print']);
$r->get('/deliveries/{id}/picking',[DeliveryController::class,'picking'],['auth','permission:deliveries.print']);
$r->get('/invoices',[InvoiceController::class,'index'],['auth','permission:invoices.view']);
$r->get('/invoices/create',[InvoiceController::class,'form'],['auth','permission:invoices.create']);
$r->get('/invoices/recurring',[RecurringInvoiceController::class,'index'],['auth','permission:invoices.create_recurring']);
$r->post('/invoices',[InvoiceController::class,'save'],['auth','permission:invoices.create','csrf','invoice_payload']);
$r->get('/invoices/export/{format}',[InvoiceController::class,'export'],['auth','permission:invoices.export']);
$r->post('/invoices/from-order/{orderId}',[InvoiceController::class,'fromOrder'],['auth','permission:invoices.create','csrf']);
$r->post('/invoices/from-delivery/{deliveryId}',[InvoiceController::class,'fromDelivery'],['auth','permission:invoices.create','csrf']);
$r->get('/invoices/from-deliveries',[DeliveryBatchInvoiceController::class,'index'],['auth','permission:invoices.create']);
$r->post('/invoices/from-deliveries',[DeliveryBatchInvoiceController::class,'store'],['auth','permission:invoices.create','csrf']);
$r->post('/invoices/from-quote/{id}',[QuoteInvoiceController::class,'create'],['auth','permission:invoices.create','csrf']);
$r->get('/invoices/{id}',[InvoiceController::class,'show'],['auth','permission:invoices.view']);
$r->get('/invoices/{id}/edit',[InvoiceController::class,'form'],['auth','permission:invoices.update_draft']);
$r->post('/invoices/{id}/update',[InvoiceController::class,'save'],['auth','permission:invoices.update_draft','csrf','invoice_payload']);
$r->post('/invoices/{id}/validate',[InvoiceValidationController::class,'validate'],['auth','permission:invoices.validate','csrf']);
$r->post('/invoices/{id}/due-dates',[InvoiceValidationController::class,'dueDates'],['auth','permission:invoices.manage_due_dates','csrf']);
$r->get('/invoices/{id}/pdf',[InvoicePdfController::class,'pdf'],['auth','permission:invoices.print']);
$r->post('/invoices/{id}/send',[InvoiceCommunicationController::class,'send'],['auth','permission:invoices.send','csrf']);
$r->post('/invoices/{id}/cancel',[InvoiceOperationController::class,'cancel'],['auth','permission:invoices.cancel','csrf']);
$r->post('/invoices/{id}/archive',[InvoiceOperationController::class,'archive'],['auth','permission:invoices.archive','csrf']);
$r->post('/invoices/{id}/duplicate',[InvoiceOperationController::class,'duplicate'],['auth','permission:invoices.create','csrf']);
$r->post('/invoices/{id}/reminders',[InvoiceOperationController::class,'reminder'],['auth','permission:invoices.manage_reminders','csrf']);
$r->post('/invoices/{id}/attachments',[InvoiceOperationController::class,'upload'],['auth','permission:invoices.manage_attachments','csrf']);
$r->get('/invoices/{id}/attachments/{attachmentId}',[InvoiceOperationController::class,'download'],['auth','permission:invoices.view']);
$r->post('/invoices/{id}/credit-note',[CreditNoteController::class,'create'],['auth','permission:invoices.create_credit_note','csrf']);
$r->post('/invoices/{id}/partial-credit-note',[CreditNoteController::class,'createPartial'],['auth','permission:invoices.create_credit_note','csrf']);
$r->post('/credit-notes/{id}/validate',[CreditNoteController::class,'validate'],['auth','permission:invoices.validate','csrf']);
$r->post('/orders/{id}/deposit-invoice',[DepositInvoiceController::class,'deposit'],['auth','permission:invoices.create_deposit','csrf']);
$r->post('/orders/{id}/balance-invoice',[DepositInvoiceController::class,'balance'],['auth','permission:invoices.create_balance','csrf']);
$r->post('/invoices/{id}/recurring-template',[RecurringInvoiceController::class,'create'],['auth','permission:invoices.create_recurring','csrf']);
$r->post('/invoices/recurring/{id}/generate',[RecurringInvoiceController::class,'generate'],['auth','permission:invoices.create_recurring','csrf']);
$r->post('/invoices/recurring/{id}/toggle',[RecurringInvoiceController::class,'toggle'],['auth','permission:invoices.create_recurring','csrf']);
$r->get('/payments',[PaymentController::class,'index'],['auth','permission:payments.view']);
$r->get('/payments/create',[PaymentController::class,'form'],['auth','permission:payments.create']);
$r->post('/payments',[PaymentController::class,'create'],['auth','permission:payments.create','csrf']);
$r->get('/payments/{id}',[PaymentController::class,'show'],['auth','permission:payments.view']);
$r->post('/payments/{id}/validate',[PaymentController::class,'validate'],['auth','permission:payments.validate','csrf']);
$r->post('/payments/{id}/cancel',[PaymentController::class,'cancel'],['auth','permission:payments.cancel','csrf']);
$r->get('/payments/{id}/receipt',[PaymentController::class,'receipt'],['auth','permission:payments.print']);
$r->get('/cashboxes',[FinanceController::class,'cashboxes'],['auth','permission:cashboxes.view']);
$r->post('/cashboxes',[FinanceController::class,'saveCashbox'],['auth','permission:cashboxes.create','csrf']);
$r->post('/cashboxes/{id}/open',[FinanceController::class,'open'],['auth','permission:cashboxes.open','csrf']);
$r->post('/cashboxes/{id}/close',[FinanceController::class,'close'],['auth','permission:cashboxes.close','csrf']);
$r->get('/bank-accounts',[FinanceController::class,'banks'],['auth','permission:bank_accounts.view']);
$r->get('/bank-reconciliation',[BankReconciliationController::class,'index'],['auth','permission:bank_reconciliation.view']);
$r->post('/bank-reconciliation/import',[BankReconciliationController::class,'import'],['auth','permission:bank_reconciliation.import','csrf']);
$r->post('/bank-reconciliation/lines/{id}/match',[BankReconciliationController::class,'match'],['auth','permission:bank_reconciliation.match','csrf']);
$r->post('/bank-reconciliation/lines/{id}/ignore',[BankReconciliationController::class,'ignore'],['auth','permission:bank_reconciliation.ignore','csrf']);
$r->post('/bank-accounts',[FinanceController::class,'saveBank'],['auth','permission:bank_accounts.create','csrf']);
$r->post('/finance/transfer',[FinanceController::class,'transfer'],['auth','permission:bank_accounts.transfer','csrf']);
$r->get('/checks',[CheckController::class,'index'],['auth','permission:checks.view']);
$r->post('/checks/{id}/deposit',[CheckController::class,'deposit'],['auth','permission:checks.deposit','csrf']);
$r->post('/checks/{id}/cash',[CheckController::class,'cash'],['auth','permission:checks.cash','csrf']);
$r->post('/checks/{id}/reject',[CheckController::class,'reject'],['auth','permission:checks.reject','csrf']);
$r->get('/settings',[SettingsController::class,'index'],['auth','permission:settings.view']);
$r->get('/settings/references',[SettingsController::class,'references'],['auth','permission:settings.view']);
$r->post('/settings/company',[SettingsController::class,'saveCompany'],['auth','permission:settings.company','csrf']);
$r->post('/settings/regional',[SettingsController::class,'saveRegional'],['auth','permission:settings.regional','csrf']);
$r->post('/settings/smtp',[SettingsController::class,'saveSmtp'],['auth','permission:settings.email','csrf']);
$r->post('/settings/branding',[SettingsController::class,'saveBranding'],['auth','permission:settings.company','csrf']);
$r->post('/settings/numbering/{id}',[SettingsController::class,'saveSequence'],['auth','permission:settings.numbering','csrf']);
$r->post('/settings/backup-job',[SettingsController::class,'saveBackupJob'],['auth','permission:settings.backup','csrf']);
$r->post('/settings/maintenance',[SettingsController::class,'saveMaintenance'],['auth','permission:settings.maintenance','csrf']);
$r->post('/settings/currencies',[SettingsController::class,'saveCurrency'],['auth','permission:settings.regional','csrf']);
$r->post('/settings/taxes',[SettingsController::class,'saveTaxRate'],['auth','permission:settings.regional','csrf']);
$r->post('/settings/payment-terms',[SettingsController::class,'savePaymentTerm'],['auth','permission:settings.company','csrf']);
$r->post('/settings/payment-methods',[SettingsController::class,'savePaymentMethod'],['auth','permission:settings.company','csrf']);
$r->post('/settings/backups',[BackupController::class,'create'],['auth','permission:settings.backup','csrf']);
$r->get('/settings/backups/{id}',[BackupController::class,'download'],['auth','permission:settings.backup']);
$r->get('/reports',[ReportController::class,'index'],['auth','permission:reports.view']);
$r->get('/expenses',[ExpenseController::class,'index'],['auth','permission:expenses.view']);
$r->get('/expenses/create',[ExpenseController::class,'form'],['auth','permission:expenses.create']);
$r->post('/expenses',[ExpenseController::class,'save'],['auth','permission:expenses.create','csrf']);
$r->post('/expenses/categories',[ExpenseController::class,'category'],['auth','permission:expenses.manage_categories','csrf']);
$r->get('/expenses/export/{format}',[ExpenseController::class,'export'],['auth','permission:expenses.export']);
$r->get('/expenses/{id}',[ExpenseController::class,'show'],['auth','permission:expenses.view']);
$r->get('/expenses/{id}/edit',[ExpenseController::class,'form'],['auth','permission:expenses.update']);
$r->post('/expenses/{id}/update',[ExpenseController::class,'save'],['auth','permission:expenses.update','csrf']);
$r->post('/expenses/{id}/validate',[ExpenseController::class,'validate'],['auth','permission:expenses.validate','csrf']);
$r->post('/expenses/{id}/pay',[ExpenseController::class,'pay'],['auth','permission:expenses.pay','csrf']);
$r->post('/expenses/{id}/cancel',[ExpenseController::class,'cancel'],['auth','permission:expenses.cancel','csrf']);
$r->get('/reports/export/{type}/{format}',[ReportController::class,'export'],['auth','permission:reports.export']);
$r->get('/',static fn()=>\App\Core\Response::redirect(app()->auth()->check()?url('dashboard'):url('login')));
