<?php

// public/index.php
declare(strict_types=1);

// public/index.php

ini_set('display_errors', '1');
ini_set('display_startup_errors', '1');
ini_set('log_errors', '1');
ini_set('error_log', __DIR__ . '/../storage/logs/php_error.log');
error_reporting(E_ALL);

require_once __DIR__ . '/../app/core/init.php';

/**
 * =========================================================
 * تحميل الكنترولرز
 * =========================================================
 */

// -------------------------
// النظام الأساسي
// -------------------------
require_once APP_PATH . '/controllers/AuthController.php';
require_once APP_PATH . '/controllers/DashboardController.php';
require_once APP_PATH . '/controllers/SettingsController.php';
require_once APP_PATH . '/controllers/RolesController.php';
require_once APP_PATH . '/controllers/UsersController.php';
require_once APP_PATH . '/controllers/PrintersController.php';
require_once APP_PATH . '/controllers/WarehousesController.php';
require_once APP_PATH . '/controllers/StationsController.php';
require_once APP_PATH . '/controllers/DevicesController.php';
require_once APP_PATH . '/controllers/CashboxesController.php';
require_once APP_PATH . '/controllers/PaymentMethodsController.php';
require_once APP_PATH . '/controllers/AuditLogsController.php';
require_once APP_PATH . '/controllers/PrintController.php';
require_once APP_PATH . '/controllers/AuditController.php';


// -------------------------
// الموارد البشرية HR
// -------------------------
require_once APP_PATH . '/controllers/EmployeesController.php';
require_once APP_PATH . '/controllers/ShiftsController.php';
require_once APP_PATH . '/controllers/AttendanceLogsController.php';
require_once APP_PATH . '/controllers/LeavesController.php';
require_once APP_PATH . '/controllers/AdvancesController.php';
require_once APP_PATH . '/controllers/DeductionsController.php';
require_once APP_PATH . '/controllers/AttendanceController.php';
require_once APP_PATH . '/controllers/PayrollController.php';
require_once APP_PATH . '/controllers/TipsSettingsController.php';
require_once APP_PATH . '/controllers/TipsPoolsController.php';
require_once APP_PATH . '/controllers/HrSettingsController.php';
require_once APP_PATH . '/controllers/HrLeavePoliciesController.php';
require_once APP_PATH . '/controllers/HrDashboardController.php';

// -------------------------
// المخزون والمشتريات
// -------------------------
require_once APP_PATH . '/controllers/UnitsController.php';
require_once APP_PATH . '/controllers/MaterialCategoriesController.php';
require_once APP_PATH . '/controllers/MaterialsController.php';
require_once APP_PATH . '/controllers/MaterialUnitsController.php';
require_once APP_PATH . '/controllers/StockSnapshotController.php';
require_once APP_PATH . '/controllers/StockReportsController.php';
require_once APP_PATH . '/controllers/MaterialLedgerController.php';
require_once APP_PATH . '/controllers/StockTransfersController.php';
require_once APP_PATH . '/controllers/SuppliersController.php';
require_once APP_PATH . '/controllers/PurchasesController.php';
require_once APP_PATH . '/controllers/SupplierPaymentsController.php';
require_once APP_PATH . '/controllers/SupplierStatementController.php';
require_once APP_PATH . '/controllers/PurchaseReturnsController.php';
require_once APP_PATH . '/controllers/StockWastageController.php';
require_once APP_PATH . '/controllers/InventoryCostController.php';

// -------------------------
// العملاء
// -------------------------
require_once APP_PATH . '/controllers/CustomersController.php';
require_once APP_PATH . '/controllers/CustomerPaymentsController.php';

// -------------------------
// Front Office / POS
// -------------------------
require_once APP_PATH . '/controllers/DiningTablesController.php';
require_once APP_PATH . '/controllers/ProductCategoriesController.php';
require_once APP_PATH . '/controllers/ModifiersController.php';
require_once APP_PATH . '/controllers/ProductsController.php';
require_once APP_PATH . '/controllers/OrdersController.php';
require_once APP_PATH . '/controllers/CaptainDineInController.php';
require_once APP_PATH . '/controllers/CashierPendingApprovalsController.php';
require_once APP_PATH . '/controllers/CashierDineInController.php';
require_once APP_PATH . '/controllers/CashierTakeawayOrdersController.php';
require_once APP_PATH . '/controllers/CashierTakeawayController.php';
require_once APP_PATH . '/controllers/ClientMenuController.php';
require_once APP_PATH . '/controllers/OnlineOrdersCashierController.php';
require_once APP_PATH . '/controllers/ReadyOrdersController.php';
require_once APP_PATH . '/controllers/InventoryAuditController.php';
require_once APP_PATH . '/controllers/BackupController.php';

/**
 * =========================================================
 * Helpers
 * =========================================================
 */
function route_call(string $controllerClass, string $method = 'index', array $args = []): void
{
    $controller = new $controllerClass();

    if (!method_exists($controller, $method)) {
        http_response_code(404);
        exit('Route method not found: ' . $controllerClass . '::' . $method);
    }

    $controller->{$method}(...$args);
}

function route_call_and_exit(string $controllerClass, string $method, array $args = []): void
{
    route_call($controllerClass, $method, $args);
    exit;
}

/**
 * =========================================================
 * قراءة الأكشن من الـ URL
 * =========================================================
 */
$action = $_GET['action'] ?? 'login';

$publicActions = [
    'login',

    // Customer Menu - Public
    'customer_menu',
    'customer_menu_mods',
    'customer_menu_cart',
    'customer_menu_add',
    'customer_menu_update',
    'customer_menu_remove',
    'customer_menu_clear',
    'customer_menu_checkout',
    'customer_order_track',
    'customer_order_track_api',
	 'license_activate',
    'license_upload',
];

if (!in_array($action, $publicActions, true) && auth_user_id() === null) {
    $action = 'login';
}

/**
 * =========================================================
 * الراوتر الرئيسي
 * =========================================================
 */
switch ($action) {

    /**
     * -----------------------------------------------------
     * المصادقة
     * -----------------------------------------------------
     */
    case 'login':
        route_call('AuthController', 'login');
        break;

    case 'logout':
        $auth = new AuthController();
        if (method_exists($auth, 'logout')) {
            $auth->logout();
        } else {
            if (session_status() === PHP_SESSION_ACTIVE) {
                session_destroy();
            }
            redirect(base_url() . '/index.php?action=login');
        }
        break;

    /**
     * -----------------------------------------------------
     * لوحة التحكم
     * -----------------------------------------------------
     */
    case 'dashboard':
        route_call('DashboardController', 'index');
        break;

    /**
     * -----------------------------------------------------
     * الإعدادات العامة و HR Settings
     * -----------------------------------------------------
     */
    case 'settings_general':
        route_call('SettingsController', 'general');
        break;

    case 'settings_hr':
        route_call('HrSettingsController', 'index');
        break;

    case 'settings_hr_save':
        route_call('HrSettingsController', 'save');
        break;

    case 'settings_hr_leaves':
        route_call('HrLeavePoliciesController', 'index');
        break;

    case 'settings_hr_leaves_store':
        route_call('HrLeavePoliciesController', 'store');
        break;

    case 'settings_hr_leaves_edit':
        route_call('HrLeavePoliciesController', 'edit');
        break;

    case 'settings_hr_leaves_update':
        route_call('HrLeavePoliciesController', 'update');
        break;

    case 'settings_hr_leaves_toggle':
        route_call('HrLeavePoliciesController', 'toggle');
        break;

    /**
     * -----------------------------------------------------
     * الأدوار والمستخدمون
     * -----------------------------------------------------
     */
    case 'roles':
        route_call('RolesController', 'index');
        break;

    case 'role_permissions':
        route_call('RolesController', 'permissions');
        break;

    case 'users':
        route_call('UsersController', 'index');
        break;

    /**
     * -----------------------------------------------------
     * البنية التحتية
     * -----------------------------------------------------
     */
    case 'warehouses':
        route_call('WarehousesController', 'index');
        break;

    case 'stations':
        route_call('StationsController', 'index');
        break;

    case 'devices':
        route_call('DevicesController', 'index');
        break;

    case 'printers':
        route_call('PrintersController', 'index');
        break;

    case 'cashboxes':
        route_call('CashboxesController', 'index');
        break;

    case 'payment_methods':
        route_call('PaymentMethodsController', 'index');
        break;

    case 'audit_logs':
        route_call('AuditLogsController', 'index');
        break;

    /**
     * -----------------------------------------------------
     * الخزائن - الشاشات التفصيلية
     * -----------------------------------------------------
     */
    case 'cashbox_balances':
        route_call('CashboxesController', 'balances');
        break;

    case 'cashbox_statement':
        route_call('CashboxesController', 'statement');
        break;

    case 'cashbox_transfers':
        route_call('CashboxesController', 'transfers');
        break;

    case 'cashbox_ledger':
        route_call('CashboxesController', 'ledger');
        break;

    case 'cashbox_closures':
        route_call('CashboxesController', 'closures');
        break;

    /**
     * -----------------------------------------------------
     * المخزون والمشتريات
     * -----------------------------------------------------
     */
    case 'units':
        route_call('UnitsController', 'index');
        break;

    case 'material_categories':
        route_call('MaterialCategoriesController', 'index');
        break;

    case 'materials':
        route_call('MaterialsController', 'index');
        break;

    case 'material_units':
        route_call('MaterialUnitsController', 'index');
        break;

    case 'stock_snapshot':
        route_call('StockSnapshotController', 'index');
        break;

    case 'stock_material_report':
        route_call('StockReportsController', 'materialMovement');
        break;

    case 'material_ledger':
        route_call('MaterialLedgerController', 'index');
        break;

    case 'stock_transfers':
        route_call('StockTransfersController', 'index');
        break;

    case 'stock_transfers_create':
        route_call('StockTransfersController', 'create');
        break;

    case 'stock_transfers_store':
        route_call('StockTransfersController', 'store');
        break;

    case 'stock_transfers_show':
        route_call('StockTransfersController', 'show');
        break;

    case 'suppliers':
        route_call('SuppliersController', 'index');
        break;

    case 'suppliers_create':
        route_call('SuppliersController', 'create');
        break;

    case 'suppliers_store':
        route_call('SuppliersController', 'store');
        break;

    case 'suppliers_edit':
        route_call('SuppliersController', 'edit');
        break;

    case 'suppliers_update':
        route_call('SuppliersController', 'update');
        break;

    case 'suppliers_toggle':
        route_call('SuppliersController', 'toggleStatus');
        break;

    case 'purchases':
        route_call('PurchasesController', 'index');
        break;

    case 'purchases_create':
        route_call('PurchasesController', 'create');
        break;

    case 'purchases_store':
        route_call('PurchasesController', 'store');
        break;

    case 'purchases_show':
        route_call('PurchasesController', 'show');
        break;

    case 'supplier_payments':
        route_call('SupplierPaymentsController', 'index');
        break;

    case 'supplier_payments_create':
        route_call('SupplierPaymentsController', 'create');
        break;

    case 'supplier_payments_store':
        route_call('SupplierPaymentsController', 'store');
        break;

    case 'supplier_statement':
        route_call('SupplierStatementController', 'index');
        break;

    case 'purchase_returns_index':
        route_call('PurchaseReturnsController', 'index');
        break;

    case 'purchase_returns_create':
        route_call('PurchaseReturnsController', 'create');
        break;

    case 'purchase_returns_store':
        route_call('PurchaseReturnsController', 'store');
        break;

    case 'purchase_returns_show':
        route_call('PurchaseReturnsController', 'show');
        break;

    case 'stock_wastage_index':
        route_call('StockWastageController', 'index');
        break;

    case 'stock_wastage_create':
        route_call('StockWastageController', 'create');
        break;

    case 'stock_wastage_store':
        route_call('StockWastageController', 'store');
        break;

    case 'stock_wastage_show':
        route_call('StockWastageController', 'show');
        break;

    case 'inventory_cost_material':
        route_call('InventoryCostController', 'material');
        break;

    /**
     * -----------------------------------------------------
     * الموارد البشرية HR
     * -----------------------------------------------------
     */
    case 'employees':
        route_call('EmployeesController', 'index');
        break;

    case 'employees_create':
        route_call('EmployeesController', 'create');
        break;

    case 'employees_store':
        route_call('EmployeesController', 'store');
        break;

    case 'employees_edit':
        route_call('EmployeesController', 'edit');
        break;

    case 'employees_update':
        route_call('EmployeesController', 'update');
        break;

    case 'employees_toggle_status':
        route_call('EmployeesController', 'toggleStatus');
        break;

    case 'shifts':
    (new ShiftsController())->index();
    break;

case 'shifts_create':
    (new ShiftsController())->create();
    break;

case 'shifts_store':
    (new ShiftsController())->store();
    break;

case 'shifts_edit':
    (new ShiftsController())->edit();
    break;

case 'shifts_update':
    (new ShiftsController())->update();
    break;

case 'shifts_toggle_status':
    (new ShiftsController())->toggleStatus();
    break;

    case 'attendance_logs':
        route_call('AttendanceLogsController', 'index');
        break;

    case 'attendance_logs_create':
        route_call('AttendanceLogsController', 'create');
        break;

    case 'attendance_logs_store':
        route_call('AttendanceLogsController', 'store');
        break;

    case 'attendance_logs_edit':
        route_call('AttendanceLogsController', 'edit');
        break;

    case 'attendance_logs_update':
        route_call('AttendanceLogsController', 'update');
        break;

    case 'attendance_logs_delete':
        route_call('AttendanceLogsController', 'delete');
        break;

    case 'attendance_daily':
        route_call('AttendanceController', 'daily');
        break;

    case 'attendance_daily_manual_create':
    route_call('AttendanceController', 'dailyManualCreate');
    break;

case 'attendance_quick_punch':
    route_call('AttendanceController', 'quickPunchPanel');
    break;

case 'attendance_quick_punch_store':
    route_call('AttendanceController', 'quickPunchStore');
    break;

    case 'attendance_daily_update':
        route_call('AttendanceController', 'dailyUpdate');
        break;

    case 'attendance_monthly':
        route_call('AttendanceController', 'monthly');
        break;

    case 'attendance_roster':
        route_call('AttendanceController', 'roster');
        break;

    case 'attendance_roster_save_cell':
        route_call('AttendanceController', 'rosterSaveCell');
        break;
		
		case 'attendance_monthly_print':
    route_call('AttendanceController', 'monthlyPrintReport');
    break;
	
	case 'payroll_approve_month':
    route_call('PayrollController', 'approveMonth');
    break;

case 'payroll_pay_month':
    route_call('PayrollController', 'payMonth');
    break;

    case 'leaves':
        route_call('LeavesController', 'index');
        break;

    case 'leaves_create':
        route_call('LeavesController', 'create');
        break;

    case 'leaves_store':
        route_call('LeavesController', 'store');
        break;

    case 'leaves_edit':
        route_call('LeavesController', 'edit');
        break;

    case 'leaves_update':
        route_call('LeavesController', 'update');
        break;

    case 'leaves_delete':
        route_call('LeavesController', 'delete');
        break;

    case 'advances':
        route_call('AdvancesController', 'index');
        break;

    case 'advances_create':
        route_call('AdvancesController', 'create');
        break;

    case 'advances_store':
        route_call('AdvancesController', 'store');
        break;

    case 'advances_edit':
        route_call('AdvancesController', 'edit');
        break;

    case 'advances_update':
        route_call('AdvancesController', 'update');
        break;

    case 'advances_delete':
        route_call('AdvancesController', 'delete');
        break;
		
		case 'advances_export':
    route_call('AdvancesController', 'exportCsv');
    break;

case 'advances_print':
    route_call('AdvancesController', 'printReport');
    break;

    case 'deductions':
        route_call('DeductionsController', 'index');
        break;

    case 'deductions_create':
        route_call('DeductionsController', 'create');
        break;

    case 'deductions_store':
        route_call('DeductionsController', 'store');
        break;

    case 'deductions_edit':
        route_call('DeductionsController', 'edit');
        break;

    case 'deductions_update':
        route_call('DeductionsController', 'update');
        break;

    case 'deductions_delete':
        route_call('DeductionsController', 'delete');
        break;

    case 'payroll':
    route_call('PayrollController', 'index');
    break;

      case 'payroll_export':
    route_call('PayrollController', 'exportCsv');
    break;
	case 'payroll_payslip_export':
    route_call('PayrollController', 'payslipExportCsv');
    break;

case 'payroll_payslip_print':
    route_call('PayrollController', 'payslipPrint');
    break;
	
	case 'attendance_monthly_export':
    route_call('AttendanceController', 'monthlyExportCsv');
    break;
	  
case 'payroll_generate':
    route_call('PayrollController', 'generate');
    break;

case 'payroll_payslip':
    route_call('PayrollController', 'payslip');
    break;
	case 'hr_dashboard':
    route_call('HrDashboardController', 'index');
    break;

    case 'tips_settings':
        route_call('TipsSettingsController', 'index');
        break;

    case 'tips_settings_save':
        route_call('TipsSettingsController', 'save');
        break;

    case 'tips_pools':
        route_call('TipsPoolsController', 'index');
        break;

    case 'tips_pools_create':
        route_call('TipsPoolsController', 'create');
        break;

    case 'tips_pools_store':
        route_call('TipsPoolsController', 'store');
        break;

    case 'tips_pools_show':
        route_call('TipsPoolsController', 'show');
        break;

    case 'tips_pools_distribute':
        route_call('TipsPoolsController', 'distribute');
        break;
   
   case 'hr_settings':
    route_call('HrSettingsController', 'index');
    break;

   case 'hr_settings_update':
    route_call('HrSettingsController', 'update');
    break;
    /**
     * -----------------------------------------------------
     * العملاء ومدفوعاتهم
     * -----------------------------------------------------
     */
    case 'customers.index':
        route_call('CustomersController', 'index');
        break;

    case 'customers.create':
        route_call('CustomersController', 'create');
        break;

    case 'customers.store':
        route_call('CustomersController', 'store');
        break;

    case 'customers.edit':
        route_call('CustomersController', 'edit', [(int)($_GET['id'] ?? 0)]);
        break;

    case 'customers.update':
        route_call('CustomersController', 'update');
        break;

    case 'customers.statement':
        route_call('CustomersController', 'statement');
        break;

    case 'customer_payments.create':
        route_call('CustomerPaymentsController', 'create');
        break;

    case 'customer_payments.store':
        route_call('CustomerPaymentsController', 'store');
        break;

    /**
     * -----------------------------------------------------
     * Front Office - المنتجات والمنيو
     * -----------------------------------------------------
     */
    case 'product_categories':
        route_call('ProductCategoriesController', 'index');
        break;

    case 'products':
        $method = $_GET['method'] ?? '';
        if ($method === 'get_details') {
            route_call_and_exit('ProductsController', 'get_details');
        }
        route_call('ProductsController', 'index');
        break;

    case 'modifiers':
        route_call('ModifiersController', 'index');
        break;

    /**
     * -----------------------------------------------------
     * إدارة الطاولات
     * -----------------------------------------------------
     * ملاحظة:
     * الأكشنات هنا تستخدم DineInTablesController
     * بينما الملف المحمّل بالأعلى هو DiningTablesController.php
     * اتركها كما هي لو كان اسم الكلاس الفعلي عندك DineInTablesController.
     */
    case 'dinein_tables':
        route_call('DineInTablesController', 'index');
        break;

    case 'dinein_tables_set_status':
        route_call('DineInTablesController', 'setStatus');
        break;

    case 'dinein_open_table':
        route_call('DineInTablesController', 'openTable');
        break;

    case 'dinein_tables_get_open_order':
        route_call_and_exit('DineInTablesController', 'getOpenOrder');
        break;

    case 'dinein_tables_move_order':
        route_call('DineInTablesController', 'moveOrder');
        break;

    case 'dinein_tables_merge_tables':
        route_call('DineInTablesController', 'mergeTables');
        break;

    case 'dinein_tables_move_items':
        route_call('DineInTablesController', 'moveItems');
        break;

    case 'dinein_tables_create':
        route_call('DineInTablesController', 'createTable');
        break;

    case 'dinein_tables_create_area':
        route_call('DineInTablesController', 'createArea');
        break;

    case 'dinein_tables_create_range':
        route_call('DineInTablesController', 'createTablesRange');
        break;

    /**
     * -----------------------------------------------------
     * المطبخ / إدارة الطلبات الخلفية
     * -----------------------------------------------------
     */
    case 'orders':
        $method = $_GET['method'] ?? '';
        $ctrl = new OrdersController();

        if ($method === 'kitchen') {
            $ctrl->kitchen();
        } elseif ($method === 'get_kds_init_data') {
            $ctrl->get_kds_init_data();
            exit;
        } elseif ($method === 'get_active_orders') {
            $ctrl->get_active_orders();
            exit;
        } elseif ($method === 'update_item_status') {
            $ctrl->update_item_status();
            exit;
        } else {
            $ctrl->index();
        }
        break;

    case 'kitchen_profit_report':
        route_call('OrdersController', 'kitchen_profit_report');
        break;

    case 'kitchen_wastage_report':
        route_call('OrdersController', 'kitchen_wastage_report');
        break;

    case 'kitchen_daily_dashboard':
        route_call('OrdersController', 'kitchen_daily_dashboard');
        break;

    case 'kitchen_production_report':
        route_call('OrdersController', 'kitchen_production_report');
        break;

    case 'kitchen_consumption_details':
        route_call('OrdersController', 'kitchen_consumption_details');
        break;

    case 'kitchen_consumption_report':
        route_call('OrdersController', 'kitchen_consumption_report');
        break;

    /**
     * -----------------------------------------------------
     * POS - كاشير الطاولات
     * -----------------------------------------------------
     */
    case 'dinein_pos':
        route_call('CashierDineInController', 'index');
        break;

    case 'dinein_get_tables':
        route_call('CashierDineInController', 'getTables');
        break;

    case 'dinein_set_table':
        route_call('CashierDineInController', 'setTable');
        break;

    case 'dinein_move_table':
        route_call('CashierDineInController', 'moveTable');
        break;

    case 'dinein_get_mods':
        route_call('CashierDineInController', 'getMods');
        break;

    case 'dinein_cart_add':
        route_call('CashierDineInController', 'cartAdd');
        break;

    case 'dinein_cart_qty':
        route_call('CashierDineInController', 'cartQty');
        break;

    case 'dinein_cart_remove':
        route_call('CashierDineInController', 'cartRemove');
        break;

    case 'dinein_set_item_note':
        route_call('CashierDineInController', 'setItemNote');
        break;

    case 'dinein_new_order':
        route_call('CashierDineInController', 'newOrder');
        break;

    case 'dinein_set_waiter':
        route_call('CashierDineInController', 'setWaiter');
        break;

    case 'dinein_set_discount':
        route_call('CashierDineInController', 'setDiscount');
        break;

    case 'dinein_set_comp':
        route_call('CashierDineInController', 'setComp');
        break;

    case 'dinein_set_notes':
        route_call('CashierDineInController', 'setNotes');
        break;

    case 'dinein_set_customer':
        route_call('CashierDineInController', 'setCustomer');
        break;

    case 'dinein_send_kitchen':
        route_call('CashierDineInController', 'sendKitchen');
        break;

    case 'dinein_cancel_sent_item':
        route_call('CashierDineInController', 'cancelSentItem');
        break;

    case 'dinein_quick_cash':
        route_call('CashierDineInController', 'quickCash');
        break;

    case 'dinein_pay':
        route_call('CashierDineInController', 'pay');
        break;

    case 'dinein_credit_sale':
        route_call('CashierDineInController', 'creditSale');
        break;

    case 'dinein_print_kitchen':
        route_call('CashierDineInController', 'printKitchen');
        break;

    case 'dinein_print_customer':
        route_call('CashierDineInController', 'printCustomer');
        break;

    case 'dinein_print_reminder':
        route_call('CashierDineInController', 'printReminder');
        break;

    case 'dinein_print_kitchen_cancel':
        route_call('CashierDineInController', 'printKitchenCancel');
        break;
      
	  case 'dinein_cart_state':
    route_call('CashierDineInController', 'cartState');
    break;
    /**
     * -----------------------------------------------------
     * POS - تيك أواي
     * -----------------------------------------------------
     */
    case 'takeaway_pos':
        route_call('CashierTakeawayController', 'index');
        break;

    case 'takeaway_pos_get_mods':
        route_call('CashierTakeawayController', 'getMods');
        break;

    case 'takeaway_pos_cart_add':
        route_call('CashierTakeawayController', 'cartAdd');
        break;

    case 'takeaway_pos_cart_qty':
        route_call('CashierTakeawayController', 'cartQty');
        break;

    case 'takeaway_pos_cart_remove':
        route_call('CashierTakeawayController', 'cartRemove');
        break;

    case 'takeaway_pos_item_note_set':
        route_call('CashierTakeawayController', 'setItemNote');
        break;

    case 'takeaway_pos_new':
    case 'takeaway_new_order':
        route_call('CashierTakeawayController', 'newOrder');
        break;

    case 'takeaway_pos_set_discount':
        route_call('CashierTakeawayController', 'setDiscount');
        break;

    case 'takeaway_pos_set_customer':
        route_call('CashierTakeawayController', 'setCustomer');
        break;

    case 'takeaway_pos_set_comp':
        route_call('CashierTakeawayController', 'setComp');
        break;

    case 'takeaway_pos_set_notes':
        route_call('CashierTakeawayController', 'setNotes');
        break;

    case 'takeaway_pos_send':
        route_call('CashierTakeawayController', 'sendKitchen');
        break;

    case 'takeaway_pos_quick_cash':
        route_call('CashierTakeawayController', 'quickCash');
        break;

    case 'takeaway_pos_pay':
        route_call('CashierTakeawayController', 'pay');
        break;

    case 'takeaway_pos_credit_sale':
        route_call('CashierTakeawayController', 'creditSale');
        break;

    case 'takeaway_pos_cancel_item':
        route_call('CashierTakeawayController', 'cancelItem');
        break;

    case 'takeaway_cancel_sent_item':
        route_call('CashierTakeawayController', 'cancelSentItem');
        break;

    case 'takeaway_print_kitchen':
        route_call('CashierTakeawayController', 'printKitchen');
        break;

    case 'takeaway_print_customer':
        route_call('CashierTakeawayController', 'printCustomer');
        break;

    case 'takeaway_print_cancel':
        route_call('CashierTakeawayController', 'printCancel');
        break;

    case 'takeaway_print_reminder':
        route_call('CashierTakeawayController', 'printReminder');
        break;

    case 'takeaway_orders':
        route_call('CashierTakeawayOrdersController', 'index');
        break;

    case 'takeaway_orders_show':
        route_call('CashierTakeawayOrdersController', 'show');
        break;

    case 'takeaway_orders_complete':
        route_call('CashierTakeawayOrdersController', 'complete');
        break;

    /**
     * -----------------------------------------------------
     * Captain POS + الموافقات
     * -----------------------------------------------------
     */
    case 'captain_dinein':
        route_call('CaptainDineInController', 'index');
        break;

    case 'captain_dinein_get_mods':
        route_call('CaptainDineInController', 'getMods');
        break;

    case 'captain_dinein_cart_add':
        route_call('CaptainDineInController', 'cartAdd');
        break;

    case 'captain_dinein_cart_qty':
        route_call('CaptainDineInController', 'cartQty');
        break;

    case 'captain_dinein_cart_remove':
        route_call('CaptainDineInController', 'cartRemove');
        break;

    case 'captain_dinein_set_item_note':
        route_call('CaptainDineInController', 'setItemNote');
        break;

    case 'captain_dinein_new_order':
        route_call('CaptainDineInController', 'newOrder');
        break;

    case 'captain_dinein_set_notes':
        route_call('CaptainDineInController', 'setNotes');
        break;

    case 'captain_dinein_set_waiter':
        route_call('CaptainDineInController', 'setWaiter');
        break;

    case 'captain_dinein_send':
        route_call('CaptainDineInController', 'sendPendingApproval');
        break;

    case 'cashier_pending_approvals':
        route_call('CashierPendingApprovalsController', 'index');
        break;

    case 'cashier_pending_approve':
        route_call('CashierPendingApprovalsController', 'approve');
        break;

    case 'cashier_pending_reject':
        route_call('CashierPendingApprovalsController', 'reject');
        break;

    case 'cashier_pending_print_kitchen':
        route_call('CashierPendingApprovalsController', 'printKitchenBatch');
        break;

    /**
     * -----------------------------------------------------
     * الطباعة العامة
     * -----------------------------------------------------
     */
    case 'print_preview':
        route_call('PrintController', 'preview');
        break;
         
		 case 'reports':
    require_once APP_PATH . '/controllers/ReportsController.php';
    (new ReportsController())->index();
    break;
    case 'reports':
    require_once APP_PATH . '/controllers/ReportsController.php';
    (new ReportsController())->index();
    break;

case 'report_sales_products':
    require_once APP_PATH . '/controllers/ReportsController.php';
    (new ReportsController())->salesProducts();
    break;

case 'report_sales_product_show':
    require_once APP_PATH . '/controllers/ReportsController.php';
    (new ReportsController())->salesProductShow();
    break;

case 'report_purchase_items':
    require_once APP_PATH . '/controllers/ReportsController.php';
    (new ReportsController())->purchaseItems();
    break;

case 'report_purchase_item_show':
    require_once APP_PATH . '/controllers/ReportsController.php';
    (new ReportsController())->purchaseItemShow();
    break;

case 'report_stock_transfer_cost':
    require_once APP_PATH . '/controllers/ReportsController.php';
    (new ReportsController())->stockTransferCost();
    break;

case 'report_modifier_sales':
    require_once APP_PATH . '/controllers/ReportsController.php';
    (new ReportsController())->modifierSales();
    break;

case 'report_sales_tables':
    require_once APP_PATH . '/controllers/ReportsController.php';
    (new ReportsController())->salesTables();
    break;

case 'report_sales_table_show':
    require_once APP_PATH . '/controllers/ReportsController.php';
    (new ReportsController())->salesTableShow();
    break;

case 'report_check_show':
    require_once APP_PATH . '/controllers/ReportsController.php';
    (new ReportsController())->reportCheckShow();
    break;

case 'report_sales_captains':
    require_once APP_PATH . '/controllers/ReportsController.php';
    (new ReportsController())->salesCaptains();
    break;

case 'report_sales_captain_show':
    require_once APP_PATH . '/controllers/ReportsController.php';
    (new ReportsController())->salesCaptainShow();
    break;

case 'report_checks':
    require_once APP_PATH . '/controllers/ReportsController.php';
    (new ReportsController())->checksIndex();
    break;

case 'report_check_show':
    require_once APP_PATH . '/controllers/ReportsController.php';
    (new ReportsController())->checkShow();
    break;
	case 'reports':
    require_once APP_PATH . '/controllers/ReportsController.php';
    (new ReportsController())->index();
    break;

case 'report_sales_products':
    require_once APP_PATH . '/controllers/ReportsController.php';
    (new ReportsController())->salesProducts();
    break;

case 'report_sales_product_show':
    require_once APP_PATH . '/controllers/ReportsController.php';
    (new ReportsController())->salesProductShow();
    break;

case 'report_purchase_items':
    require_once APP_PATH . '/controllers/ReportsController.php';
    (new ReportsController())->purchaseItems();
    break;

case 'report_purchase_item_show':
    require_once APP_PATH . '/controllers/ReportsController.php';
    (new ReportsController())->purchaseItemShow();
    break;

case 'report_stock_transfer_cost':
    require_once APP_PATH . '/controllers/ReportsController.php';
    (new ReportsController())->stockTransferCost();
    break;

case 'report_modifier_sales':
    require_once APP_PATH . '/controllers/ReportsController.php';
    (new ReportsController())->modifierSales();
    break;

case 'report_sales_tables':
    require_once APP_PATH . '/controllers/ReportsController.php';
    (new ReportsController())->salesTables();
    break;

case 'report_sales_table_show':
    require_once APP_PATH . '/controllers/ReportsController.php';
    (new ReportsController())->salesTableShow();
    break;

case 'report_sales_captains':
    require_once APP_PATH . '/controllers/ReportsController.php';
    (new ReportsController())->salesCaptains();
    break;

case 'report_sales_captain_show':
    require_once APP_PATH . '/controllers/ReportsController.php';
    (new ReportsController())->salesCaptainShow();
    break;

case 'report_sales_cashiers':
    require_once APP_PATH . '/controllers/ReportsController.php';
    (new ReportsController())->salesCashiers();
    break;

case 'report_sales_cashier_show':
    require_once APP_PATH . '/controllers/ReportsController.php';
    (new ReportsController())->salesCashierShow();
    break;

case 'report_check_show':
    require_once APP_PATH . '/controllers/ReportsController.php';
    (new ReportsController())->reportCheckShow();
    break;
	
	case 'reports_manual_wastage':
    require_once APP_PATH . '/controllers/ReportsController.php';
	(new ReportsController())->manualWastage();
    break;
	/**
     * -----------------------------------------------------
     * منيو العميل
     * -----------------------------------------------------
     */
	case 'customer_menu':
    (new ClientMenuController())->menu();
    break;

case 'customer_menu_mods':
    (new ClientMenuController())->mods();
    break;

case 'customer_menu_cart':
    (new ClientMenuController())->cart();
    break;

case 'customer_menu_add':
    (new ClientMenuController())->add();
    break;

case 'customer_menu_update':
    (new ClientMenuController())->update();
    break;

case 'customer_menu_remove':
    (new ClientMenuController())->remove();
    break;

case 'customer_menu_clear':
    (new ClientMenuController())->clear();
    break;

case 'customer_menu_checkout':
    (new ClientMenuController())->checkout();
    break;

case 'customer_order_track':
    (new ClientMenuController())->track();
    break;

case 'customer_order_track_api':
    (new ClientMenuController())->trackApi();
    break;

case 'customer_orders_inbox':
    (new ClientMenuController())->inbox();
    break;

case 'customer_orders_get':
    (new ClientMenuController())->get_order();
    break;

case 'customer_orders_approve':
    (new ClientMenuController())->approve();
    break;

case 'customer_orders_reject':
    (new ClientMenuController())->reject();
    break;
	case 'online_orders_cashier':
    route_call('OnlineOrdersCashierController', 'index');
    break;

case 'online_orders_cashier_get':
    route_call('OnlineOrdersCashierController', 'get');
    break;

case 'online_orders_cashier_mark_preparing':
    route_call('OnlineOrdersCashierController', 'mark_preparing');
    break;

case 'online_orders_cashier_mark_ready':
    route_call('OnlineOrdersCashierController', 'mark_ready');
    break;

case 'online_orders_cashier_complete':
    route_call('OnlineOrdersCashierController', 'complete');
    break;

case 'online_orders_cashier_quick_cash':
    route_call('OnlineOrdersCashierController', 'quick_cash');
    break;

case 'online_orders_cashier_pay':
    route_call('OnlineOrdersCashierController', 'pay');
    break;

case 'online_orders_cashier_print_customer':
    route_call('OnlineOrdersCashierController', 'printCustomer');
    break;

case 'online_orders_cashier_remove_item':
    route_call('OnlineOrdersCashierController', 'removeItem');
    break;

case 'online_orders_cashier_cancel_sent_item':
    route_call('OnlineOrdersCashierController', 'cancelSentItem');
    break;
	
	// =============================
// Ready Orders (طلبات جاهزة)
// =============================
case 'ready_orders':
    (new ReadyOrdersController())->index();
    break;

case 'ready_orders_get':
    (new ReadyOrdersController())->get_ready_orders();
    break;

case 'ready_orders_details':
    (new ReadyOrdersController())->get_order_details();
    break;

case 'ready_orders_served':
    (new ReadyOrdersController())->mark_served();
    break;
	
	case 'inventory_audit':
    (new InventoryAuditController())->index();
    break;
	
	case 'license_activate':
    (new LicenseController())->activate();
    break;

case 'license_upload':
    (new LicenseController())->upload();
    break;
	
	case 'backup':
    route_call('BackupController', 'index');
    break;

case 'backup_create':
    route_call('BackupController', 'create');
    break;

case 'backup_download':
    route_call('BackupController', 'download');
    break;

case 'backup_delete':
    route_call('BackupController', 'delete');
    break;

case 'backup_restore':
    route_call('BackupController', 'restore');
    break;
	
	case 'audit.index':
    route_call('AuditController', 'index');
    break;
	
	/**
     * -----------------------------------------------------
     * أي أكشن غير معروف
     * -----------------------------------------------------
     */
    default:
        if (auth_user_id() === null) {
            route_call('AuthController', 'login');
        } else {
            route_call('DashboardController', 'index');
        }
        break;
}
