<?php
/**
 * WMS PRO - Definición de rutas API REST
 *
 * Convención:
 *   - Prefijo: /api
 *   - Autenticación: JWT Bearer token (excepto /api/auth/login)
 *   - Content-Type: application/json
 */

use WMS\Controllers\AuthController;
use WMS\Controllers\WarehouseController;
use WMS\Controllers\BinController;
use WMS\Controllers\ZonificationController;
use WMS\Controllers\ZonePreferencesController;
use WMS\Controllers\FamilyZoneRulesController;
use WMS\Controllers\SubgrupoZoneRulesController;
use WMS\Controllers\RelocationController;
use WMS\Controllers\StockController;
use WMS\Controllers\ReceptionController;
use WMS\Controllers\PutawayController;
use WMS\Controllers\PickingController;
use WMS\Controllers\TaskController;
use WMS\Controllers\CycleCountController;
use WMS\Controllers\DashboardController;
use WMS\Controllers\SapController;
use WMS\Controllers\ItemController;
use WMS\Controllers\MovementController;
use WMS\Controllers\AuditController;
use WMS\Controllers\QaController;
use WMS\Controllers\UserController;
use WMS\Controllers\LabelController;
use WMS\Controllers\BatchAttachmentController;
use WMS\Controllers\ContainerController;
use WMS\Controllers\PackingController;
use WMS\Controllers\DispatchController;
use WMS\Controllers\ReturnController;
use WMS\Controllers\AgendaController;
use WMS\Controllers\WaveController;
use WMS\Controllers\ManualPrepController;
use WMS\Controllers\TransferController;
use WMS\Controllers\QcExternalController;
use WMS\Controllers\ZonePickController;
use WMS\Controllers\RecallController;
use WMS\Controllers\PrintController;
use WMS\Controllers\TemperatureController;
use WMS\Controllers\ReportController;
use WMS\Controllers\NotificationController;
use WMS\Controllers\SopController;
use WMS\Controllers\SettingsController;
use WMS\Controllers\SamplingController;
use WMS\Controllers\MenuController;
use WMS\Controllers\RoleController;

/** @var \WMS\Core\Router $router */

// ── Autenticación ───────────────────────────────────────────────
$router->post('/api/auth/login', [AuthController::class, 'login']);

// ── Almacenes ───────────────────────────────────────────────────
$router->get('/api/warehouses',      [WarehouseController::class, 'index']);
$router->get('/api/warehouses/{id}', [WarehouseController::class, 'show']);
$router->get('/api/warehouses/{id}/map', [WarehouseController::class, 'map']);
$router->get('/api/warehouses/{id}/zones', [WarehouseController::class, 'zones']);

// ── Ubicaciones (Bins) ──────────────────────────────────────────
$router->get('/api/warehouses/{warehouse_id}/bins', [BinController::class, 'index']);
$router->get('/api/bins',                            [BinController::class, 'listAll']);
$router->get('/api/bins/{id}',                       [BinController::class, 'show']);
$router->post('/api/bins',                           [BinController::class, 'create']);
$router->put('/api/bins/{id}',                       [BinController::class, 'update']);
$router->delete('/api/bins/{id}',                    [BinController::class, 'delete']);

// ── Stock ───────────────────────────────────────────────────────
$router->get('/api/stock',                              [StockController::class, 'query']);
$router->post('/api/stock/move',                        [StockController::class, 'move']);
$router->post('/api/stock/batches/{batch_id}/block',    [StockController::class, 'blockBatch']);
$router->post('/api/stock/batches/{batch_id}/release',  [StockController::class, 'releaseBatch']);

// ── Agenda de Recepcion ─────────────────────────────────────────
$router->post('/api/agendas',                                [AgendaController::class, 'create']);
$router->get('/api/agendas',                                 [AgendaController::class, 'index']);
$router->get('/api/agendas/with-diffs',                     [AgendaController::class, 'withDiffs']);
$router->get('/api/agendas/{id}/acta.pdf',           [AgendaController::class, 'actaPdf']);
$router->get('/api/agendas/{id}',                            [AgendaController::class, 'show']);
$router->post('/api/agendas/{id}/references',                [AgendaController::class, 'addReference']);
$router->post('/api/agendas/{id}/assign',                    [AgendaController::class, 'assign']);
$router->post('/api/agendas/import-sap-po',                  [AgendaController::class, 'importSapPo']);
$router->post('/api/agenda-refs/{id}/retry-sap',             [AgendaController::class, 'retrySap']);
$router->post('/api/agendas/{id}/reconcile-stock',           [AgendaController::class, 'reconcileStock']);
$router->delete('/api/agendas/{id}/references/{ref_id}',     [AgendaController::class, 'removeReference']);
$router->post('/api/agendas/{id}/open',                      [AgendaController::class, 'open']);
$router->post('/api/agendas/{id}/scan',                      [AgendaController::class, 'scan']);
$router->get('/api/agendas/{id}/differences',                [AgendaController::class, 'getDifferences']);
$router->post('/api/agendas/{id}/close',                     [AgendaController::class, 'close']);

// ── Recepción ───────────────────────────────────────────────────
$router->post('/api/reception',                        [ReceptionController::class, 'create']);
$router->get('/api/reception/{doc_id}',                [ReceptionController::class, 'show']);
$router->post('/api/reception/{doc_id}/confirm-line',  [ReceptionController::class, 'confirmLine']);
$router->post('/api/reception/{doc_id}/complete',      [ReceptionController::class, 'complete']);

// ── Putaway ─────────────────────────────────────────────────────
$router->post('/api/putaway',                        [PutawayController::class, 'create']);
$router->post('/api/putaway/{task_id}/confirm',      [PutawayController::class, 'confirm']);
$router->post('/api/putaway/grouped',                [PutawayController::class, 'grouped']);
$router->get('/api/putaway/suggest/{item_id}',       [PutawayController::class, 'suggest']);
$router->get('/api/putaway/suggest-chaotic',         [PutawayController::class, 'suggestChaotic']);
$router->get('/api/putaway/stats',                   [PutawayController::class, 'stats']);
$router->post('/api/putaway/by-container',           [PutawayController::class, 'byContainer']);
$router->post('/api/putaway/by-location',            [PutawayController::class, 'byLocation']);
$router->post('/api/putaway/free',                   [PutawayController::class, 'free']);

// ── Picking ─────────────────────────────────────────────────────
$router->post('/api/picking',                          [PickingController::class, 'create']);
$router->get('/api/picking/{id}',                      [PickingController::class, 'show']);
$router->get('/api/picking/open/{warehouse_id}',       [PickingController::class, 'openLists']);
$router->get('/api/picking/recent/{warehouse_id}',     [PickingController::class, 'recent']);
$router->get('/api/picking/packable/{warehouse_id}',   [PickingController::class, 'packableLists']);
$router->post('/api/picking/tasks/{task_id}/confirm',  [PickingController::class, 'confirmPick']);

// ── Tareas de Almacén ───────────────────────────────────────────
$router->get('/api/tasks/{warehouse_id}',        [TaskController::class, 'index']);
$router->get('/api/tasks/{warehouse_id}/history',[TaskController::class, 'history']);
$router->get('/api/tasks/detail/{id}',           [TaskController::class, 'show']);
$router->post('/api/tasks/{task_id}/assign',     [TaskController::class, 'assign']);
$router->post('/api/tasks/{task_id}/start',      [TaskController::class, 'start']);

// ── Conteo Cíclico ──────────────────────────────────────────────
$router->post('/api/cycle-counts',                                  [CycleCountController::class, 'create']);
$router->get('/api/cycle-counts/{id}',                              [CycleCountController::class, 'show']);
$router->post('/api/cycle-counts/lines/{line_id}/count',            [CycleCountController::class, 'recordCount']);
$router->post('/api/cycle-counts/lines/{line_id}/approve',          [CycleCountController::class, 'approve']);
$router->post('/api/cycle-counts/by-locations',                     [CycleCountController::class, 'createByLocations']);
$router->post('/api/cycle-counts/by-stock',                         [CycleCountController::class, 'createByStockRecords']);
$router->post('/api/cycle-counts/lines/{line_id}/second-count',     [CycleCountController::class, 'recordSecondCount']);
$router->post('/api/adjustments/direct',                            [CycleCountController::class, 'directAdjustment']);

// ── Dashboard ──────────────────────────────────────────────────
$router->get('/api/dashboard', [DashboardController::class, 'index']);

// ── Items ──────────────────────────────────────────────────────
$router->get('/api/items',      [ItemController::class, 'index']);
$router->get('/api/items/{id}', [ItemController::class, 'show']);
$router->get('/api/items/{id}/batches', [ItemController::class, 'batches']);
$router->post('/api/items/block-entry', [ItemController::class, 'blockEntry']);

// ── Movements / Traceability ───────────────────────────────────
$router->get('/api/movements', [MovementController::class, 'index']);

// ── QA ─────────────────────────────────────────────────────────
$router->get('/api/qa/pending',  [QaController::class, 'pending']);
$router->get('/api/qa/expiring', [QaController::class, 'expiring']);
$router->post('/api/qa/batches/{batch_id}/approve',    [QaController::class, 'approve']);
$router->post('/api/qa/batches/{batch_id}/reject',     [QaController::class, 'reject']);
$router->post('/api/qa/batches/{batch_id}/quarantine', [QaController::class, 'quarantine']);
$router->post("/api/qa/batches/{batch_id}/send-to-putaway", [QaController::class, "sendToPutaway"]);

// ── Users ──────────────────────────────────────────────────────
$router->get('/api/users',              [UserController::class, 'index']);
$router->get('/api/users/operators',    [UserController::class, 'operators']);
$router->get('/api/users/online',        [UserController::class, 'online']);
$router->get('/api/users/{id}',         [UserController::class, 'show']);
$router->post('/api/users',             [UserController::class, 'create']);
$router->put('/api/users/{id}',         [UserController::class, 'update']);
$router->delete('/api/users/{id}',      [UserController::class, 'delete']);

// ── Roles (CRUD) ───────────────────────────────────────────────
$router->get('/api/roles',              [RoleController::class, 'index']);
$router->get('/api/roles/{id}',         [RoleController::class, 'show']);
$router->post('/api/roles',             [RoleController::class, 'create']);
$router->put('/api/roles/{id}',         [RoleController::class, 'update']);
$router->delete('/api/roles/{id}',      [RoleController::class, 'delete']);

// ── SAP Integration ────────────────────────────────────────────
$router->get('/api/sap/connection-status',              [SapController::class, 'connectionStatus']);
$router->get('/api/sap/purchase-orders',                [SapController::class, 'purchaseOrders']);
$router->get('/api/sap/purchase-orders/{docEntry}/lines', [SapController::class, 'purchaseOrderLines']);
$router->get('/api/sap/sales-orders',                   [SapController::class, 'salesOrders']);
$router->get('/api/sap/sales-orders/{docEntry}/lines',  [SapController::class, 'salesOrderLines']);
$router->get('/api/sap/stock-transfers',                [SapController::class, 'stockTransfers']);
$router->get('/api/sap/goods-receipts',                 [SapController::class, 'goodsReceipts']);
$router->get('/api/sap/credit-notes',                  [SapController::class, 'creditNotes']);
$router->get('/api/sap/transfer-requests',             [SapController::class, 'transferRequests']);
$router->get('/api/sap/drivers',                        [SapController::class, 'drivers']);
$router->get('/api/sap/vehicles',                       [SapController::class, 'vehicles']);
$router->get('/api/sap/items',                          [SapController::class, 'items']);
$router->post('/api/sap/sync-items',                    [SapController::class, 'syncItems']);
$router->get('/api/sap/sync-log',                       [SapController::class, 'syncLog']);
$router->post('/api/sap/sync-warehouses',               [SapController::class, 'syncWarehouses']);

// ── Labels ─────────────────────────────────────────────────────
$router->post('/api/labels/batch-generate',   [LabelController::class, 'batchGenerate']);
$router->post('/api/labels',                  [LabelController::class, 'generate']);
$router->get('/api/labels/{id}/zpl',          [LabelController::class, 'printZpl']);
$router->get('/api/labels/{id}/preview',      [LabelController::class, 'printPreview']);

// Adjuntos de lote (CoA y otros documentos GMP)
$router->post('/api/batches/{id}/coa',        [BatchAttachmentController::class, 'upload']);
$router->get('/api/batches/{id}/coa',         [BatchAttachmentController::class, 'list']);
$router->get('/api/batches/{id}/coa/{aid}',   [BatchAttachmentController::class, 'download']);
$router->get('/api/labels/{id}',              [LabelController::class, 'show']);
$router->post('/api/labels/{id}/print',       [LabelController::class, 'markPrinted']);

// ── Print / ZPL Zebra ─────────────────────────────────────────
$router->get('/api/batches/{id}/label',       [PrintController::class, 'batchLabel']);
$router->get('/api/packing/{id}/label',       [PrintController::class, 'packingLabel']);
$router->post('/api/print/product-label',     [PrintController::class, 'productLabel']);
$router->post('/api/print/bin-label',         [PrintController::class, 'binLabel']);
$router->post('/api/print/container-label',   [PrintController::class, 'containerLabel']);
$router->post('/api/print/delivery-label',    [PrintController::class, 'deliveryLabel']);
$router->post('/api/print/send',              [PrintController::class, 'sendToPrinter']);

// ── Containers / LPN ───────────────────────────────────────────
$router->get('/api/containers/scan/{code}',   [ContainerController::class, 'scanByCode']);
$router->post('/api/containers',              [ContainerController::class, 'create']);
$router->get('/api/containers',               [ContainerController::class, 'index']);
$router->get('/api/containers/{id}',          [ContainerController::class, 'show']);
$router->post('/api/containers/{id}/items',   [ContainerController::class, 'addItem']);
$router->post('/api/containers/{id}/close',   [ContainerController::class, 'close']);

// ── Packing / Empaque ──────────────────────────────────────────
$router->get('/api/packing/pending/{warehouse_id}',    [PackingController::class, 'pending']);
$router->get('/api/packing/recent/{warehouse_id}',     [PackingController::class, 'recent']);
$router->post('/api/packing',                          [PackingController::class, 'create']);
$router->get('/api/packing/{id}/customer-containers',  [PackingController::class, 'customerContainers']);
$router->get('/api/packing/{id}',                      [PackingController::class, 'show']);
$router->post('/api/packing/{id}/scan',                [PackingController::class, 'scanItem']);
$router->post('/api/packing/{id}/pack-line/{line_num}',[PackingController::class, 'packLine']);
$router->post('/api/packing/{id}/complete',            [PackingController::class, 'complete']);

// ── Dispatch / Expedicion ──────────────────────────────────────
$router->get('/api/dispatch/open/{warehouse_id}',      [DispatchController::class, 'openDispatches']);
$router->get('/api/dispatch/recent/{warehouse_id}',    [DispatchController::class, 'recent']);
$router->post('/api/dispatch',                         [DispatchController::class, 'create']);
$router->get('/api/dispatch/{id}/packing-list',        [DispatchController::class, 'packingList']);
$router->get('/api/dispatch/{id}',                     [DispatchController::class, 'show']);
$router->post('/api/dispatch/{id}/assign',             [DispatchController::class, 'assignOrder']);
$router->post('/api/dispatch/{id}/scan-container',     [DispatchController::class, 'scanContainer']);
$router->post('/api/dispatch/{id}/close',              [DispatchController::class, 'close']);

// ── Returns / Devoluciones ─────────────────────────────────────
$router->get('/api/returns/open/{warehouse_id}',       [ReturnController::class, 'openReturns']);
$router->post('/api/returns',                          [ReturnController::class, 'create']);
$router->get('/api/returns/{id}',                      [ReturnController::class, 'show']);
$router->post('/api/returns/{doc_id}/receive-line',    [ReturnController::class, 'receiveLine']);
$router->post('/api/returns/{doc_id}/complete',        [ReturnController::class, 'complete']);

// ── Olas de Picking (Waves) ───────────────────────────────────
$router->post('/api/waves',                           [WaveController::class, 'create']);
$router->get('/api/waves',                            [WaveController::class, 'index']);
$router->get('/api/waves/{id}',                       [WaveController::class, 'show']);
$router->post('/api/waves/{id}/release',              [WaveController::class, 'release']);
$router->get('/api/waves/{id}/rejections',            [WaveController::class, 'rejections']);
$router->post('/api/waves/rejections/{id}/resolve',   [WaveController::class, 'resolveRejection']);

// ── Preparacion Manual ────────────────────────────────────────
$router->post('/api/manual-prep',                     [ManualPrepController::class, 'create']);
$router->get('/api/manual-prep',                      [ManualPrepController::class, 'index']);
$router->get('/api/manual-prep/{id}',                 [ManualPrepController::class, 'show']);
$router->post('/api/manual-prep/{id}/pick',           [ManualPrepController::class, 'pickLine']);
$router->post('/api/manual-prep/{id}/complete',       [ManualPrepController::class, 'complete']);

// ── Transferencias con Etiquetas de Transito ──────────────────
$router->post('/api/transfers',                       [TransferController::class, 'create']);
$router->get('/api/transfers',                        [TransferController::class, 'index']);
$router->get('/api/transfers/{id}',                   [TransferController::class, 'show']);
$router->post('/api/transfers/{id}/load-location',    [TransferController::class, 'loadByLocation']);
$router->post('/api/transfers/{id}/load-product',     [TransferController::class, 'loadByProduct']);
$router->post('/api/transfers/{id}/unload-all',       [TransferController::class, 'unloadAll']);
$router->post('/api/transfers/{id}/unload-product',   [TransferController::class, 'unloadByProduct']);
$router->post('/api/transfers/{id}/to-transit',       [TransferController::class, 'moveToTransit']);
$router->post('/api/transfers/{id}/complete',         [TransferController::class, 'complete']);
$router->post('/api/transfers/{id}/sync-sap',         [TransferController::class, 'sapSync']);

// ── QC Externo ────────────────────────────────────────────────
$router->post('/api/qc/external/assign',              [QcExternalController::class, 'assignQc']);
$router->post('/api/qc/external/approve',             [QcExternalController::class, 'approveQc']);
$router->post('/api/qc/external/reject',              [QcExternalController::class, 'rejectQc']);
$router->get('/api/qc/config',                        [QcExternalController::class, 'getConfig']);
$router->post('/api/qc/config',                       [QcExternalController::class, 'setConfig']);

// ── Zone Pick (Sala de Pesaje) ────────────────────────────────
$router->post('/api/zone-picks',                       [ZonePickController::class, 'create']);
$router->get('/api/zone-picks',                        [ZonePickController::class, 'index']);
$router->get('/api/zone-picks/{id}',                   [ZonePickController::class, 'show']);
$router->post('/api/zone-picks/{id}/collect',          [ZonePickController::class, 'collectLine']);
$router->post('/api/zone-picks/{id}/deliver',          [ZonePickController::class, 'deliverAll']);
$router->post('/api/zone-picks/{id}/return',           [ZonePickController::class, 'returnSurplus']);
$router->post('/api/zone-picks/{id}/complete',         [ZonePickController::class, 'complete']);

// ── Recall / Retiro de Producto (DINAVISA) ─────────────────────
$router->post('/api/recalls',                [RecallController::class, 'create']);
$router->get('/api/recalls',                 [RecallController::class, 'index']);
$router->get('/api/recalls/{id}',            [RecallController::class, 'show']);
$router->post('/api/recalls/{id}/execute',   [RecallController::class, 'execute']);
$router->post('/api/recalls/{id}/complete',  [RecallController::class, 'complete']);

// ── Control de Temperatura (DINAVISA) ──────────────────────────
$router->get('/api/temperature/dashboard',              [TemperatureController::class, 'dashboard']);
$router->get('/api/temperature/zones',                  [TemperatureController::class, 'zones']);
$router->post('/api/temperature/zones',                 [TemperatureController::class, 'createZone']);
$router->post('/api/temperature/readings',              [TemperatureController::class, 'recordReading']);
$router->get('/api/temperature/readings',               [TemperatureController::class, 'readings']);
$router->get('/api/temperature/alerts',                 [TemperatureController::class, 'alerts']);
$router->post('/api/temperature/alerts/{id}/acknowledge', [TemperatureController::class, 'acknowledgeAlert']);

// ── Reportes / Exportacion ─────────────────────────────────────
$router->get('/api/reports/{key}/data',          [ReportController::class, 'getData']);
$router->get('/api/reports/available',           [ReportController::class, 'available']);
$router->get('/api/reports/stock/csv',           [ReportController::class, 'stockCsv']);
$router->get('/api/reports/movements/csv',       [ReportController::class, 'movementsCsv']);
$router->get('/api/reports/recalls/csv',         [ReportController::class, 'recallsCsv']);
$router->get('/api/reports/expiring/csv',        [ReportController::class, 'expiringCsv']);
$router->get('/api/reports/temperature/csv',     [ReportController::class, 'temperatureCsv']);
$router->get('/api/reports/inventory/csv',       [ReportController::class, 'inventoryCsv']);
$router->get('/api/reports/audit-trail/csv',    [ReportController::class, 'auditTrailCsv']);
$router->get('/api/reports/batch-trace/csv',    [ReportController::class, 'batchTraceCsv']);
$router->get('/api/reports/access-log/csv',     [ReportController::class, 'accessLogCsv']);

// ── Notificaciones ─────────────────────────────────────────────
$router->get('/api/notifications',                  [NotificationController::class, 'index']);
$router->get('/api/notifications/count',            [NotificationController::class, 'count']);
$router->post('/api/notifications/{id}/read',       [NotificationController::class, 'markRead']);
$router->post('/api/notifications/read-all',        [NotificationController::class, 'markAllRead']);
$router->post('/api/notifications/{id}/dismiss',    [NotificationController::class, 'dismiss']);
$router->post('/api/notifications/check',           [NotificationController::class, 'runChecks']);
$router->get('/api/notifications/rules',            [NotificationController::class, 'rules']);
$router->post('/api/notifications/rules',           [NotificationController::class, 'createRule']);

// ── SOPs DINAVISA ─────────────────────────────────────────────
$router->get('/api/sops',                [SopController::class, 'index']);
$router->get('/api/sops/{id}',           [SopController::class, 'show']);
$router->post('/api/sops',               [SopController::class, 'create']);
$router->put('/api/sops/{id}',           [SopController::class, 'update']);

// -- Muestreo QA ------------------------------------------------
$router->get('/api/sampling',                    [SamplingController::class, 'index']);
$router->post('/api/sampling',                   [SamplingController::class, 'create']);
$router->get('/api/sampling/{id}',               [SamplingController::class, 'show']);
$router->post('/api/sampling/{id}/assign',       [SamplingController::class, 'assign']);
$router->post('/api/sampling/{id}/deliver',      [SamplingController::class, 'deliver']);
$router->post('/api/sampling/{id}/sample',       [SamplingController::class, 'sample']);
$router->post('/api/sampling/{id}/complete',     [SamplingController::class, 'complete']);
$router->post('/api/sampling/{id}/cancel',       [SamplingController::class, 'cancel']);

$router->get('/api/settings/password-policy',  [SettingsController::class, 'getPasswordPolicy']);
$router->post('/api/settings/password-policy', [SettingsController::class, 'setPasswordPolicy']);

$router->post('/api/sops/{id}/approve',  [SopController::class, 'approve']);

// -- Menu dinamico (Xpert Menu v1.0 sec. 5.2) ----------------------
$router->get('/api/menu',                          [MenuController::class, 'index']);
$router->get('/api/rf-menu',                        [MenuController::class, 'rfMenu']);
$router->get('/api/menu/matrix',                   [MenuController::class, 'matrix']);
$router->put('/api/menu/items/{id}/access',        [MenuController::class, 'setItemAccess']);

// -- Audit Trail (GAMP 5 / Anexo 11 / 21 CFR Part 11) ---------------
require_once __DIR__ . '/../controllers/AuditController.php';
$router->get('/api/audit',          [AuditController::class, 'index']);
$router->get('/api/audit/summary',  [AuditController::class, 'summary']);
$router->get('/api/audit/{id}',     [AuditController::class, 'show']);

// ── Zonificación: posiciones fijas por grupo de artículos ───────
$router->get('/api/zonification',                [ZonificationController::class, 'index']);
$router->post('/api/zonification',               [ZonificationController::class, 'create']);
$router->put('/api/zonification/{id}',           [ZonificationController::class, 'update']);
$router->delete('/api/zonification/{id}',        [ZonificationController::class, 'delete']);
$router->get('/api/zonification/groups',         [ZonificationController::class, 'groups']);
$router->get('/api/zonification/coverage',       [ZonificationController::class, 'coverage']);

// ── Zone Preferences (Zona × Item) ───────────────────────────────
$router->get('/api/zone-preferences',                  [ZonePreferencesController::class, 'index']);
$router->get('/api/zone-preferences/summary',          [ZonePreferencesController::class, 'summary']);
$router->put('/api/zone-preferences/family/{familia}', [ZonePreferencesController::class, 'updateFamily']);
$router->get('/api/zone-preferences/{id}',             [ZonePreferencesController::class, 'show']);
$router->post('/api/zone-preferences',                 [ZonePreferencesController::class, 'create']);
$router->put('/api/zone-preferences/{id}',             [ZonePreferencesController::class, 'update']);
$router->delete('/api/zone-preferences/{id}',          [ZonePreferencesController::class, 'delete']);

// ── Family Zone Rules (Zona × Familia) ───────────────────────────
$router->get('/api/family-zone-rules',          [FamilyZoneRulesController::class, 'index']);
$router->get('/api/family-zone-rules/{id}',     [FamilyZoneRulesController::class, 'show']);
$router->post('/api/family-zone-rules',         [FamilyZoneRulesController::class, 'create']);
$router->put('/api/family-zone-rules/{id}',     [FamilyZoneRulesController::class, 'update']);
$router->delete('/api/family-zone-rules/{id}',  [FamilyZoneRulesController::class, 'delete']);

// ── Subgrupo Zone Rules (Zona × Grupo Anterior) ──────────────────
$router->get('/api/subgrupo-zone-rules',          [SubgrupoZoneRulesController::class, 'index']);
$router->get('/api/subgrupo-zone-rules/{id}',     [SubgrupoZoneRulesController::class, 'show']);
$router->post('/api/subgrupo-zone-rules',         [SubgrupoZoneRulesController::class, 'create']);
$router->put('/api/subgrupo-zone-rules/{id}',     [SubgrupoZoneRulesController::class, 'update']);
$router->delete('/api/subgrupo-zone-rules/{id}',  [SubgrupoZoneRulesController::class, 'delete']);

// ── Reubicación LPN (intra-zona) ──────────────────────────────────
$router->get('/api/relocations',                  [RelocationController::class, 'index']);
$router->post('/api/relocations',                 [RelocationController::class, 'create']);
$router->get('/api/relocations/lookup/{container_id}', [RelocationController::class, 'lookup']);
$router->get('/api/relocations/{id}',             [RelocationController::class, 'show']);
$router->put('/api/relocations/{id}/assign',      [RelocationController::class, 'assign']);
$router->post('/api/relocations/{id}/complete',   [RelocationController::class, 'complete']);
$router->post('/api/relocations/{id}/cancel',     [RelocationController::class, 'cancel']);
