<?php

declare(strict_types=1);

define('BASE_PATH', dirname(__DIR__));

require_once BASE_PATH . '/app/autoload.php';
require_once BASE_PATH . '/app/helpers.php';

use App\Controllers\AuthController;
use App\Controllers\ArcaController;
use App\Controllers\CashClosingController;
use App\Controllers\ConfigCrmController;
use App\Controllers\CustomerController;
use App\Controllers\CustomerDeliveryNoteController;
use App\Controllers\CustomerReturnController;
use App\Controllers\CustomerReceiptController;
use App\Controllers\DashboardController;
use App\Controllers\ExchangeRateController;
use App\Controllers\FinanceController;
use App\Controllers\ImportController;
use App\Controllers\ProductController;
use App\Controllers\ReportController;
use App\Controllers\PurchaseController;
use App\Controllers\SaleDocumentController;
use App\Controllers\SupplierController;
use App\Controllers\SystemResetController;
use App\Controllers\TreasuryRenditionController;
use App\Controllers\UserAdminController;
use App\Controllers\SetupController;
use App\Controllers\StockController;
use App\Core\Env;
use App\Core\Router;
use App\Core\Session;
use App\Core\View;

Env::load(BASE_PATH . '/.env');
date_default_timezone_set((string)Env::get('APP_TIMEZONE', 'America/Argentina/Buenos_Aires'));
Session::start();

$router = new Router();

$router->get('/setup', [SetupController::class, 'index']);
$router->post('/setup', [SetupController::class, 'store']);

$router->get('/login', [AuthController::class, 'showLogin']);
$router->post('/login', [AuthController::class, 'login']);
$router->post('/logout', [AuthController::class, 'logout'], ['auth' => true]);

$router->get('/', [DashboardController::class, 'index'], ['auth' => true]);

$router->get('/config', [ConfigCrmController::class, 'overview'], ['auth' => true, 'permission' => 'configuracion.empresa.ver']);
$router->get('/config/company', [ConfigCrmController::class, 'companyPage'], ['auth' => true, 'permission' => 'configuracion.empresa.ver']);
$router->post('/config/company/update', [ConfigCrmController::class, 'updateCompany'], ['auth' => true, 'permission' => 'configuracion.empresa.editar']);
$router->get('/config/branches', [ConfigCrmController::class, 'branches'], ['auth' => true, 'permission' => 'configuracion.sucursales.ver']);
$router->get('/config/branches/create', [ConfigCrmController::class, 'createBranch'], ['auth' => true, 'permission' => 'configuracion.sucursales.crear']);
$router->post('/config/branches', [ConfigCrmController::class, 'storeBranch'], ['auth' => true, 'permission' => 'configuracion.sucursales.crear']);
$router->get('/config/branches/edit', [ConfigCrmController::class, 'editBranch'], ['auth' => true, 'permission' => 'configuracion.sucursales.editar']);
$router->post('/config/branches/update', [ConfigCrmController::class, 'updateBranch'], ['auth' => true, 'permission' => 'configuracion.sucursales.editar']);
$router->get('/config/warehouses/create', [ConfigCrmController::class, 'createWarehouse'], ['auth' => true, 'permission' => 'configuracion.sucursales.crear']);
$router->post('/config/warehouses', [ConfigCrmController::class, 'storeWarehouse'], ['auth' => true, 'permission' => 'configuracion.sucursales.crear']);
$router->get('/config/warehouses/edit', [ConfigCrmController::class, 'editWarehouse'], ['auth' => true, 'permission' => 'configuracion.sucursales.editar']);
$router->post('/config/warehouses/update', [ConfigCrmController::class, 'updateWarehouse'], ['auth' => true, 'permission' => 'configuracion.sucursales.editar']);
$router->get('/config/points-of-sale/create', [ConfigCrmController::class, 'createPointOfSale'], ['auth' => true, 'permission' => 'configuracion.sucursales.crear']);
$router->post('/config/points-of-sale', [ConfigCrmController::class, 'storePointOfSale'], ['auth' => true, 'permission' => 'configuracion.sucursales.crear']);
$router->get('/config/points-of-sale/edit', [ConfigCrmController::class, 'editPointOfSale'], ['auth' => true, 'permission' => 'configuracion.sucursales.editar']);
$router->post('/config/points-of-sale/update', [ConfigCrmController::class, 'updatePointOfSale'], ['auth' => true, 'permission' => 'configuracion.sucursales.editar']);
$router->post('/config/switch-branch', [ConfigCrmController::class, 'switchBranch'], ['auth' => true]);
$router->get('/config/backup', [ConfigCrmController::class, 'backup'], ['auth' => true, 'permission' => 'configuracion.backup.ver']);
$router->post('/config/backup/create', [ConfigCrmController::class, 'createBackup'], ['auth' => true, 'permission' => 'configuracion.backup.generar']);
$router->get('/config/backup/download', [ConfigCrmController::class, 'downloadBackup'], ['auth' => true, 'permission' => 'configuracion.backup.descargar']);
$router->post('/config/backup/delete', [ConfigCrmController::class, 'deleteBackup'], ['auth' => true, 'permission' => 'configuracion.backup.generar']);
$router->get('/config/system', [ConfigCrmController::class, 'system'], ['auth' => true, 'permission' => 'configuracion.empresa.ver']);
$router->get('/config/reset', [SystemResetController::class, 'index'], ['auth' => true, 'permission' => 'configuracion.reset.ver']);
$router->post('/config/reset/run', [SystemResetController::class, 'run'], ['auth' => true, 'permission' => 'configuracion.reset.ejecutar']);
$router->get('/config/document-template', [ConfigCrmController::class, 'documentTemplate'], ['auth' => true, 'permission' => 'configuracion.empresa.ver']);
$router->post('/config/document-template', [ConfigCrmController::class, 'saveDocumentTemplate'], ['auth' => true, 'permission' => 'configuracion.empresa.ver']);
$router->post('/config/document-template/reset', [ConfigCrmController::class, 'resetDocumentTemplate'], ['auth' => true, 'permission' => 'configuracion.empresa.ver']);
$router->post('/config/company/logo', [ConfigCrmController::class, 'saveCompanyLogo'], ['auth' => true, 'permission' => 'configuracion.empresa.ver']);
$router->post('/config/company/logo/delete', [ConfigCrmController::class, 'deleteCompanyLogo'], ['auth' => true, 'permission' => 'configuracion.empresa.ver']);
$router->get('/config/company/logo-file', [ConfigCrmController::class, 'companyLogoFile'], ['auth' => true, 'permission' => 'configuracion.empresa.ver']);
$router->get('/config/document-templates', [ConfigCrmController::class, 'documentTemplates'], ['auth' => true, 'permission' => 'configuracion.empresa.ver']);
$router->post('/config/document-templates', [ConfigCrmController::class, 'saveDocumentTemplates'], ['auth' => true, 'permission' => 'configuracion.empresa.ver']);

$router->get('/users', [UserAdminController::class, 'index'], ['auth' => true, 'permission' => 'configuracion.usuarios.ver']);
$router->get('/users/create', [UserAdminController::class, 'create'], ['auth' => true, 'permission' => 'configuracion.usuarios.crear']);
$router->post('/users', [UserAdminController::class, 'store'], ['auth' => true, 'permission' => 'configuracion.usuarios.crear']);
$router->get('/users/edit', [UserAdminController::class, 'edit'], ['auth' => true, 'permission' => 'configuracion.usuarios.editar']);
$router->post('/users/update', [UserAdminController::class, 'update'], ['auth' => true, 'permission' => 'configuracion.usuarios.editar']);
$router->get('/users/roles', [UserAdminController::class, 'roles'], ['auth' => true, 'permission' => 'configuracion.roles.ver']);

$router->get('/arca', [ArcaController::class, 'overview'], ['auth' => true, 'permission' => 'arca.configuracion.ver']);
$router->get('/arca/settings', [ArcaController::class, 'settings'], ['auth' => true, 'permission' => 'arca.configuracion.ver']);
$router->get('/arca/iva-sales', [ArcaController::class, 'ivaSales'], ['auth' => true, 'permission' => 'arca.facturacion.ver']);
$router->get('/arca/iva-purchases', [ArcaController::class, 'ivaPurchases'], ['auth' => true, 'permission' => 'arca.facturacion.ver']);

$router->get('/exchange-rates', [ExchangeRateController::class, 'index'], ['auth' => true, 'permission' => 'configuracion.tipos_cambio.ver']);
$router->get('/exchange-rates/create', [ExchangeRateController::class, 'create'], ['auth' => true, 'permission' => 'configuracion.tipos_cambio.crear']);
$router->get('/exchange-rates/edit', [ExchangeRateController::class, 'edit'], ['auth' => true, 'permission' => 'configuracion.tipos_cambio.crear']);
$router->post('/exchange-rates/update', [ExchangeRateController::class, 'update'], ['auth' => true, 'permission' => 'configuracion.tipos_cambio.crear']);
$router->post('/exchange-rates', [ExchangeRateController::class, 'store'], ['auth' => true, 'permission' => 'configuracion.tipos_cambio.crear']);
$router->get('/api/exchange-rates/latest', [ExchangeRateController::class, 'latest'], ['auth' => true, 'permission' => 'configuracion.tipos_cambio.ver']);

$router->get('/products', [ProductController::class, 'index'], ['auth' => true, 'permission' => 'productos.ver']);
$router->get('/products/create', [ProductController::class, 'create'], ['auth' => true, 'permission' => 'productos.crear']);
$router->post('/products', [ProductController::class, 'store'], ['auth' => true, 'permission' => 'productos.crear']);
$router->get('/products/edit', [ProductController::class, 'edit'], ['auth' => true, 'permission' => 'productos.editar']);
$router->post('/products/update', [ProductController::class, 'update'], ['auth' => true, 'permission' => 'productos.editar']);
$router->get('/api/products/search', [ProductController::class, 'search'], ['auth' => true, 'permission' => 'productos.ver']);

$router->get('/customers', [CustomerController::class, 'index'], ['auth' => true, 'permission' => 'clientes.ver']);
$router->get('/customers/show', [CustomerController::class, 'show'], ['auth' => true, 'permission' => 'clientes.ver']);
$router->get('/customers/statement', [CustomerController::class, 'statement'], ['auth' => true, 'permission' => 'clientes.ver']);
$router->get('/customers/statement/export', [CustomerController::class, 'statementCsv'], ['auth' => true, 'permission' => 'clientes.ver']);
$router->get('/customers/create', [CustomerController::class, 'create'], ['auth' => true, 'permission' => 'clientes.crear']);
$router->post('/customers', [CustomerController::class, 'store'], ['auth' => true, 'permission' => 'clientes.crear']);
$router->get('/customers/edit', [CustomerController::class, 'edit'], ['auth' => true, 'permission' => 'clientes.editar']);
$router->post('/customers/update', [CustomerController::class, 'update'], ['auth' => true, 'permission' => 'clientes.editar']);
$router->get('/customers/modal-form', [CustomerController::class, 'modalForm'], ['auth' => true]);
$router->post('/customers/modal-save', [CustomerController::class, 'modalSave'], ['auth' => true]);

$router->get('/suppliers', [SupplierController::class, 'index'], ['auth' => true, 'permission' => 'proveedores.ver']);
$router->get('/suppliers/show', [SupplierController::class, 'show'], ['auth' => true, 'permission' => 'proveedores.ver']);
$router->get('/suppliers/create', [SupplierController::class, 'create'], ['auth' => true, 'permission' => 'proveedores.crear']);
$router->post('/suppliers', [SupplierController::class, 'store'], ['auth' => true, 'permission' => 'proveedores.crear']);
$router->get('/suppliers/edit', [SupplierController::class, 'edit'], ['auth' => true, 'permission' => 'proveedores.editar']);
$router->post('/suppliers/update', [SupplierController::class, 'update'], ['auth' => true, 'permission' => 'proveedores.editar']);

$router->get('/imports', [ImportController::class, 'index'], ['auth' => true]);
$router->get('/imports/products', [ImportController::class, 'products'], ['auth' => true, 'permission' => 'productos.crear']);
$router->post('/imports/products', [ImportController::class, 'uploadProducts'], ['auth' => true, 'permission' => 'productos.crear']);
$router->get('/imports/customers', [ImportController::class, 'customers'], ['auth' => true, 'permission' => 'clientes.crear']);
$router->post('/imports/customers', [ImportController::class, 'uploadCustomers'], ['auth' => true, 'permission' => 'clientes.crear']);
$router->get('/imports/suppliers', [ImportController::class, 'suppliers'], ['auth' => true, 'permission' => 'proveedores.crear']);
$router->post('/imports/suppliers', [ImportController::class, 'uploadSuppliers'], ['auth' => true, 'permission' => 'proveedores.crear']);





$router->get('/reports', [ReportController::class, 'overview'], ['auth' => true, 'permission' => 'reportes.operativos.ver']);
$router->get('/reports/sales', [ReportController::class, 'sales'], ['auth' => true, 'permission' => 'reportes.operativos.ver']);
$router->get('/reports/collections', [ReportController::class, 'collections'], ['auth' => true, 'permission' => 'reportes.operativos.ver']);
$router->get('/reports/receivables', [ReportController::class, 'receivables'], ['auth' => true, 'permission' => 'reportes.operativos.ver']);
$router->get('/reports/payables', [ReportController::class, 'payables'], ['auth' => true, 'permission' => 'reportes.operativos.ver']);
$router->get('/reports/supplier-debt', [ReportController::class, 'supplierDebt'], ['auth' => true, 'permission' => 'reportes.operativos.ver']);
$router->get('/reports/stock-valuation', [ReportController::class, 'stockValuation'], ['auth' => true, 'permission' => 'reportes.operativos.ver']);
$router->get('/reports/cash-daily', [ReportController::class, 'cashDaily'], ['auth' => true, 'permission' => 'reportes.operativos.ver']);

$router->get('/finance', [FinanceController::class, 'overview'], ['auth' => true]);
$router->get('/finance/cash-closing', [CashClosingController::class, 'index'], ['auth' => true, 'permission' => 'caja.ver']);
$router->get('/finance/cash-closing/close', [CashClosingController::class, 'closeForm'], ['auth' => true, 'permission' => 'caja.cierres.crear']);
$router->post('/finance/cash-closing/close', [CashClosingController::class, 'storeClose'], ['auth' => true, 'permission' => 'caja.cierres.crear']);
$router->get('/finance/cash-closing/show', [CashClosingController::class, 'show'], ['auth' => true, 'permission' => 'caja.ver']);
$router->post('/finance/cash-closing/reopen', [CashClosingController::class, 'reopen'], ['auth' => true, 'permission' => 'caja.cierres.reabrir']);

$router->get('/receipts', [CustomerReceiptController::class, 'index'], ['auth' => true, 'permission' => 'clientes.recibos.ver']);
$router->get('/receipts/create', [CustomerReceiptController::class, 'create'], ['auth' => true, 'permission' => 'clientes.recibos.crear']);
$router->get('/api/customers/open-documents', [CustomerReceiptController::class, 'openDocumentsApi'], ['auth' => true, 'permission' => 'clientes.recibos.crear']);
$router->post('/receipts', [CustomerReceiptController::class, 'store'], ['auth' => true, 'permission' => 'clientes.recibos.crear']);
$router->get('/receipts/show', [CustomerReceiptController::class, 'show'], ['auth' => true, 'permission' => 'clientes.recibos.ver']);
$router->get('/receipts/apply', [CustomerReceiptController::class, 'applyForm'], ['auth' => true, 'permission' => 'clientes.recibos.imputar']);
$router->post('/receipts/apply', [CustomerReceiptController::class, 'applyStore'], ['auth' => true, 'permission' => 'clientes.recibos.imputar']);
$router->post('/receipts/void', [CustomerReceiptController::class, 'void'], ['auth' => true, 'permission' => 'clientes.recibos.anular']);

$router->get('/supplier-payments', [FinanceController::class, 'supplierPayments'], ['auth' => true, 'permission' => 'proveedores.pagos.ver']);
$router->get('/supplier-payments/create', [FinanceController::class, 'createSupplierPayment'], ['auth' => true, 'permission' => 'proveedores.pagos.crear']);
$router->post('/supplier-payments', [FinanceController::class, 'storeSupplierPayment'], ['auth' => true, 'permission' => 'proveedores.pagos.crear']);
$router->get('/supplier-payments/show', [FinanceController::class, 'showSupplierPayment'], ['auth' => true, 'permission' => 'proveedores.pagos.ver']);
$router->post('/supplier-payments/void', [FinanceController::class, 'voidSupplierPayment'], ['auth' => true, 'permission' => 'proveedores.pagos.crear']);

$router->get('/finance/treasury', [TreasuryRenditionController::class, 'treasury'], ['auth' => true, 'permission' => 'caja.gerente.ver']);
$router->post('/finance/treasury/manager-cashbox', [TreasuryRenditionController::class, 'updateManagerCashbox'], ['auth' => true, 'permission' => 'caja.gerente.configurar']);
$router->get('/finance/renditions', [TreasuryRenditionController::class, 'index'], ['auth' => true, 'permission' => 'caja.rendiciones.ver']);
$router->get('/finance/renditions/create', [TreasuryRenditionController::class, 'create'], ['auth' => true, 'permission' => 'caja.rendiciones.crear']);
$router->post('/finance/renditions', [TreasuryRenditionController::class, 'store'], ['auth' => true, 'permission' => 'caja.rendiciones.crear']);
$router->get('/finance/renditions/show', [TreasuryRenditionController::class, 'show'], ['auth' => true, 'permission' => 'caja.rendiciones.ver']);
$router->post('/finance/renditions/send', [TreasuryRenditionController::class, 'send'], ['auth' => true, 'permission' => 'caja.rendiciones.crear']);
$router->post('/finance/renditions/receive', [TreasuryRenditionController::class, 'receive'], ['auth' => true, 'permission' => 'caja.rendiciones.recibir']);
$router->post('/finance/renditions/reject', [TreasuryRenditionController::class, 'reject'], ['auth' => true, 'permission' => 'caja.rendiciones.recibir']);
$router->post('/finance/renditions/void', [TreasuryRenditionController::class, 'void'], ['auth' => true, 'permission' => 'caja.rendiciones.crear']);

$router->get('/cashboxes/movements', [FinanceController::class, 'cashboxMovements'], ['auth' => true, 'permission' => 'caja.ver']);
$router->get('/bank-accounts', [FinanceController::class, 'bankAccounts'], ['auth' => true, 'permission' => 'bancos.ver']);
$router->get('/bank-accounts/create', [FinanceController::class, 'createBankAccount'], ['auth' => true, 'permission' => 'bancos.movimientos.crear']);
$router->post('/bank-accounts', [FinanceController::class, 'storeBankAccount'], ['auth' => true, 'permission' => 'bancos.movimientos.crear']);
$router->get('/bank-movements', [FinanceController::class, 'bankMovements'], ['auth' => true, 'permission' => 'bancos.ver']);
$router->get('/checks', [FinanceController::class, 'checks'], ['auth' => true, 'permission' => 'cheques.ver']);
$router->get('/checks/show', [FinanceController::class, 'showCheck'], ['auth' => true, 'permission' => 'cheques.ver']);
$router->post('/checks/status', [FinanceController::class, 'updateCheckStatus'], ['auth' => true, 'permission' => 'cheques.cambiar_estado']);
// Compatibilidad con enlaces emitidos por la vista de finanzas v0.6/v0.7.
$router->get('/finance/checks', [FinanceController::class, 'checks'], ['auth' => true, 'permission' => 'cheques.ver']);
$router->get('/finance/checks/show', [FinanceController::class, 'showCheck'], ['auth' => true, 'permission' => 'cheques.ver']);
$router->post('/finance/checks/status', [FinanceController::class, 'updateCheckStatus'], ['auth' => true, 'permission' => 'cheques.cambiar_estado']);

$router->get('/purchases', [PurchaseController::class, 'overview'], ['auth' => true]);
$router->get('/purchases/orders', [PurchaseController::class, 'orders'], ['auth' => true, 'permission' => 'compras.ordenes.ver']);
$router->get('/purchases/orders/create', [PurchaseController::class, 'createOrder'], ['auth' => true, 'permission' => 'compras.ordenes.crear']);
$router->post('/purchases/orders', [PurchaseController::class, 'storeOrder'], ['auth' => true, 'permission' => 'compras.ordenes.crear']);
$router->get('/purchases/orders/show', [PurchaseController::class, 'showOrder'], ['auth' => true, 'permission' => 'compras.ordenes.ver']);
$router->post('/purchases/orders/send', [PurchaseController::class, 'sendOrder'], ['auth' => true, 'permission' => 'compras.ordenes.aprobar']);
$router->post('/purchases/orders/void', [PurchaseController::class, 'voidOrder'], ['auth' => true, 'permission' => 'compras.ordenes.aprobar']);

$router->get('/purchases/invoices', [PurchaseController::class, 'invoices'], ['auth' => true, 'permission' => 'compras.facturas.ver']);
$router->get('/purchases/invoices/create', [PurchaseController::class, 'createInvoice'], ['auth' => true, 'permission' => 'compras.facturas.crear']);
$router->post('/purchases/invoices', [PurchaseController::class, 'storeInvoice'], ['auth' => true, 'permission' => 'compras.facturas.crear']);
$router->get('/purchases/invoices/show', [PurchaseController::class, 'showInvoice'], ['auth' => true, 'permission' => 'compras.facturas.ver']);
$router->post('/purchases/invoices/void', [PurchaseController::class, 'voidInvoice'], ['auth' => true, 'permission' => 'compras.facturas.crear']);

$router->get('/purchases/delivery-notes', [PurchaseController::class, 'deliveryNotes'], ['auth' => true, 'permission' => 'compras.remitos.ver']);
$router->get('/purchases/delivery-notes/create', [PurchaseController::class, 'createDeliveryNote'], ['auth' => true, 'permission' => 'compras.remitos.crear']);
$router->post('/purchases/delivery-notes', [PurchaseController::class, 'storeDeliveryNote'], ['auth' => true, 'permission' => 'compras.remitos.crear']);
$router->get('/purchases/delivery-notes/show', [PurchaseController::class, 'showDeliveryNote'], ['auth' => true, 'permission' => 'compras.remitos.ver']);
$router->post('/purchases/delivery-notes/receive', [PurchaseController::class, 'receiveDeliveryNote'], ['auth' => true, 'permission' => 'compras.remitos.crear']);
$router->post('/purchases/delivery-notes/void', [PurchaseController::class, 'voidDeliveryNote'], ['auth' => true, 'permission' => 'compras.remitos.crear']);

$router->get('/api/purchases/products/search', [PurchaseController::class, 'productSearch'], ['auth' => true]);
$router->get('/api/purchases/order-lines', [PurchaseController::class, 'orderLinesApi'], ['auth' => true]);
$router->get('/api/purchases/invoice-lines', [PurchaseController::class, 'invoiceLinesApi'], ['auth' => true]);

$router->get('/stock', [StockController::class, 'index'], ['auth' => true, 'permission' => 'stock.saldos.ver']);
$router->get('/stock/movements', [StockController::class, 'movements'], ['auth' => true, 'permission' => 'stock.saldos.ver']);
$router->get('/stock/adjustments', [StockController::class, 'adjustments'], ['auth' => true, 'permission' => 'stock.ajustes.ver']);
$router->get('/stock/adjustments/create', [StockController::class, 'createAdjustment'], ['auth' => true, 'permission' => 'stock.ajustes.crear']);
$router->post('/stock/adjustments', [StockController::class, 'storeAdjustment'], ['auth' => true, 'permission' => 'stock.ajustes.crear']);
$router->get('/stock/adjustments/show', [StockController::class, 'showAdjustment'], ['auth' => true, 'permission' => 'stock.ajustes.ver']);
$router->post('/stock/adjustments/approve', [StockController::class, 'approveAdjustment'], ['auth' => true, 'permission' => 'stock.ajustes.aprobar']);
$router->post('/stock/adjustments/void', [StockController::class, 'voidAdjustment'], ['auth' => true, 'permission' => 'stock.ajustes.aprobar']);
$router->get('/stock/import-initial', [StockController::class, 'importInitialStock'], ['auth' => true, 'permission' => 'stock.ajustes.crear']);
$router->post('/stock/import-initial', [StockController::class, 'uploadInitialStock'], ['auth' => true, 'permission' => 'stock.ajustes.crear']);
$router->get('/api/stock/products/search', [StockController::class, 'productSearch'], ['auth' => true, 'permission' => 'stock.saldos.ver']);


$router->get('/customer-returns', [CustomerReturnController::class, 'index'], ['auth' => true, 'permission' => 'ventas.devoluciones.ver']);
$router->get('/customer-returns/create', [CustomerReturnController::class, 'create'], ['auth' => true, 'permission' => 'ventas.devoluciones.crear']);
$router->post('/customer-returns', [CustomerReturnController::class, 'store'], ['auth' => true, 'permission' => 'ventas.devoluciones.crear']);
$router->get('/customer-returns/show', [CustomerReturnController::class, 'show'], ['auth' => true, 'permission' => 'ventas.devoluciones.ver']);
$router->post('/customer-returns/approve', [CustomerReturnController::class, 'approve'], ['auth' => true, 'permission' => 'ventas.devoluciones.aprobar']);
$router->post('/customer-returns/refund', [CustomerReturnController::class, 'refund'], ['auth' => true, 'permission' => 'clientes.devoluciones.dinero']);

$router->get('/customer-delivery-notes', [CustomerDeliveryNoteController::class, 'index'], ['auth' => true, 'permission' => 'ventas.remitos.ver']);
$router->get('/customer-delivery-notes/create', [CustomerDeliveryNoteController::class, 'create'], ['auth' => true, 'permission' => 'ventas.remitos.crear']);
$router->post('/customer-delivery-notes', [CustomerDeliveryNoteController::class, 'store'], ['auth' => true, 'permission' => 'ventas.remitos.crear']);
$router->get('/customer-delivery-notes/show', [CustomerDeliveryNoteController::class, 'show'], ['auth' => true, 'permission' => 'ventas.remitos.ver']);
$router->post('/customer-delivery-notes/approve', [CustomerDeliveryNoteController::class, 'approve'], ['auth' => true, 'permission' => 'ventas.remitos.aprobar']);
$router->post('/customer-delivery-notes/void', [CustomerDeliveryNoteController::class, 'void'], ['auth' => true, 'permission' => 'ventas.remitos.anular']);

$router->get('/sales-documents', [SaleDocumentController::class, 'index'], ['auth' => true]);
$router->get('/sales-documents/create', [SaleDocumentController::class, 'create'], ['auth' => true]);
$router->post('/sales-documents', [SaleDocumentController::class, 'store'], ['auth' => true]);
$router->get('/sales-documents/edit', [SaleDocumentController::class, 'edit'], ['auth' => true]);
$router->post('/sales-documents/update', [SaleDocumentController::class, 'update'], ['auth' => true]);
$router->get('/sales-documents/show', [SaleDocumentController::class, 'show'], ['auth' => true]);
$router->post('/sales-documents/approve', [SaleDocumentController::class, 'approve'], ['auth' => true]);
$router->post('/sales-documents/convert', [SaleDocumentController::class, 'convert'], ['auth' => true, 'permission' => 'ventas.documentos.convertir']);
$router->post('/sales-documents/void', [SaleDocumentController::class, 'void'], ['auth' => true]);
$router->get('/api/sales/products/search', [SaleDocumentController::class, 'productSearch'], ['auth' => true]);

try {
    $router->dispatch();
} catch (Throwable $e) {
    http_response_code(500);
    $message = Env::bool('APP_DEBUG', false) ? $e->getMessage() . "\n" . $e->getTraceAsString() : null;
    View::render('errors/500', ['title' => 'Error interno', 'message' => $message]);
}
