<?php

use App\Http\Controllers\Admin\AttributeController;
use App\Http\Controllers\Admin\AttributeValueController;
use App\Http\Controllers\Admin\BannerController as AdminBannerController;
use App\Http\Controllers\Admin\AnnouncementController as AdminAnnouncementController;
use App\Http\Controllers\Admin\BarcodeController;
use App\Http\Controllers\Admin\BrandController;
use App\Http\Controllers\Admin\CategoryController as AdminCategoryController;
use App\Http\Controllers\Admin\CouponController as AdminCouponController;
use App\Http\Controllers\Admin\DashboardController;
use App\Http\Controllers\Admin\OrderController as AdminOrderController;
use App\Http\Controllers\Admin\PosController;
use App\Http\Controllers\Admin\RoleController;
use App\Http\Controllers\Admin\ProductController as AdminProductController;
use App\Http\Controllers\Admin\RestockController;
use App\Http\Controllers\Admin\StockAuditController;
use App\Http\Controllers\Admin\StockAdjustmentController;
use App\Http\Controllers\Admin\LocationController;
use App\Http\Controllers\Admin\StockTransferController;
use App\Http\Controllers\Admin\PurchaseOrderController;
use App\Http\Controllers\Admin\SupplierController;
use App\Http\Controllers\Admin\InventoryBalanceController;
use App\Http\Controllers\Admin\LocationReportController;
use App\Http\Controllers\Admin\AllocationRuleController;
use App\Http\Controllers\StoreLocatorController;
use App\Http\Controllers\Admin\DeliveryAnalyticsController;
use App\Http\Controllers\Admin\LedgerController;
use App\Http\Controllers\Admin\ReportController;
use App\Http\Controllers\Admin\ReviewController as AdminReviewController;
use App\Http\Controllers\Admin\SettingController as AdminSettingController;
use App\Http\Controllers\Admin\SmsTemplateController;
use App\Http\Controllers\Admin\ShippingController;
use App\Http\Controllers\Admin\TicketController as AdminTicketController;
use App\Http\Controllers\Admin\UserController as AdminUserController;
use App\Http\Controllers\Api\Pos\CustomerController as PosCustomerController;
use App\Http\Controllers\Api\Pos\OrderController as PosOrderController;
use App\Http\Controllers\Api\Pos\ProductController as PosProductController;
use App\Http\Controllers\Api\Pos\StaffController as PosStaffController;
use App\Http\Controllers\Api\Pos\SyncController as PosSyncController;
use App\Http\Controllers\Admin\ShippingCountryController;
use App\Http\Controllers\Admin\ShippingStateController;
use App\Http\Controllers\Admin\ShippingCityController;
use App\Http\Controllers\Api\ShippingController as ApiShippingController;
use App\Http\Controllers\Auth\OtpLoginController;
use App\Http\Controllers\Auth\PasswordResetController;
use App\Http\Controllers\CartController;
use App\Http\Controllers\CategoryController;
use App\Http\Controllers\CheckoutController;
use App\Http\Controllers\CollectionController;
use App\Http\Controllers\Api\ProductReviewController;
use App\Http\Controllers\Customer\OrderController as CustomerOrderController;
use App\Http\Controllers\Customer\NotificationController as CustomerNotificationController;
use App\Http\Controllers\Customer\ProfileController;
use App\Http\Controllers\Customer\TicketController as CustomerTicketController;
use App\Http\Controllers\HomeController;
use App\Http\Controllers\InvoiceController;
use App\Http\Controllers\LegacyRedirectController;
use App\Http\Controllers\PolicyController;
use App\Http\Controllers\ProductController;
use App\Http\Controllers\WishlistController;
use Illuminate\Support\Facades\Route;
use Spatie\Permission\Middleware\RoleMiddleware;
use Spatie\Permission\Middleware\PermissionMiddleware;
use Spatie\Permission\Middleware\RoleOrPermissionMiddleware;
use App\Http\Middleware\CheckUserType;
use App\Http\Middleware\EnsureStoreContext;
use App\Http\Middleware\EnsureWarehouseCatalogueAccess;
use App\Http\Controllers\WhatsappController;
/*
|--------------------------------------------------------------------------
| Public Routes
|--------------------------------------------------------------------------
*/

Route::get('/', [HomeController::class, 'index'])->name('home');
Route::get('invoice/{encrypted_order_id}', [InvoiceController::class, 'show'])
    ->where('encrypted_order_id', '[A-Za-z0-9_-]+')
    ->middleware('throttle:60,1')
    ->name('invoice.show');

// Policy Pages
Route::get('/privacy-policy', [PolicyController::class, 'privacy'])->name('policy.privacy');
Route::get('/refund-return-policy', [PolicyController::class, 'refund'])->name('policy.refund');
Route::get('/shipping-delivery-policy', [PolicyController::class, 'shipping'])->name('policy.shipping');
Route::get('/cancellation-policy', [PolicyController::class, 'cancellation'])->name('policy.cancellation');
Route::get('/support-policy', [PolicyController::class, 'support'])->name('policy.support');
Route::get('/terms-conditions', [PolicyController::class, 'terms'])->name('policy.terms');

// Footer Pages
Route::get('/about-us', [PolicyController::class, 'aboutUs'])->name('page.about-us');
Route::get('/contact-us', [PolicyController::class, 'contactUs'])->name('page.contact-us');
Route::get('/faqs', [PolicyController::class, 'faqs'])->name('page.faqs');
Route::get('/size-care-guide', [PolicyController::class, 'sizeCareGuide'])->name('page.size-care-guide');

// Collections (SEO-friendly URLs for categories and special collections)
Route::get('/collections/{slug}', [CollectionController::class, 'show'])->name('collections.show');

// Products
Route::get('/product/{slug}', [ProductController::class, 'show'])->name('product.show');
Route::get('/search', [ProductController::class, 'search'])->name('product.search');
Route::get('/stores', [StoreLocatorController::class, 'index'])->name('stores.index');
Route::get('/api/products/{product}/store-availability', [StoreLocatorController::class, 'availability'])->name('api.products.store-availability');

// Backward compatibility redirects (301 Permanent Redirects)
Route::get('/category/{slug}', [LegacyRedirectController::class, 'category'])->name('category.show');
Route::get('/new-arrivals', [LegacyRedirectController::class, 'newArrivals'])->name('product.new-arrivals');

// Cart
Route::get('/cart', [CartController::class, 'index'])->name('cart.index');
Route::post('/cart', [CartController::class, 'store'])->name('cart.store');
Route::put('/cart/{productId}', [CartController::class, 'update'])->name('cart.update');
Route::delete('/cart/{productId}', [CartController::class, 'destroy'])->name('cart.destroy');
Route::post('/cart/apply-coupon', [CartController::class, 'applyCoupon'])->name('cart.apply-coupon');
Route::post('/cart/remove-coupon', [CartController::class, 'removeCoupon'])->name('cart.remove-coupon');

// Wishlist
Route::middleware(['auth'])->group(function () {
    Route::get('/wishlist', [WishlistController::class, 'index'])->name('wishlist.index');
    Route::post('/wishlist/{productId}', [WishlistController::class, 'store'])->name('wishlist.store');
    Route::delete('/wishlist/{productId}', [WishlistController::class, 'destroy'])->name('wishlist.destroy');
    Route::post('/wishlist/{productId}/toggle', [WishlistController::class, 'toggle'])->name('wishlist.toggle');
});

// Product Reviews (using session auth, returns JSON for AJAX requests)
Route::prefix('api')->group(function () {
    // Create review (auth optional if guest reviews enabled, handled in controller)
    Route::post('/products/{id}/reviews', [ProductReviewController::class, 'store'])
        ->middleware(['throttle:' . config('reviews.throttle_per_ip', 5) . ',1'])
        ->name('api.products.reviews.store');
    
    // Authenticated: Update/Delete own review, mark helpful
    Route::middleware('auth')->group(function () {
        Route::put('/reviews/{id}', [ProductReviewController::class, 'update'])->name('api.reviews.update');
        Route::delete('/reviews/{id}', [ProductReviewController::class, 'destroy'])->name('api.reviews.destroy');
        Route::post('/reviews/{id}/helpful', [ProductReviewController::class, 'markHelpful'])->name('api.reviews.helpful');
    });
});

// Shipping reference data (used by POS and frontend)
Route::prefix('api/shipping')->middleware('throttle:30,1')->group(function () {
    Route::get('/countries', [ApiShippingController::class, 'countries'])->name('api.shipping.countries');
    Route::get('/states', [ApiShippingController::class, 'states'])->name('api.shipping.states');
    Route::get('/cities', [ApiShippingController::class, 'cities'])->name('api.shipping.cities');
});

/*
|--------------------------------------------------------------------------
| Authentication Routes (OTP & Password)
|--------------------------------------------------------------------------
*/

Route::get('/login', [OtpLoginController::class, 'showLoginForm'])->name('login');
Route::post('/login/switch-mode', [OtpLoginController::class, 'switchMode'])->name('login.switch-mode');
Route::post('/login/request-otp', [OtpLoginController::class, 'requestOtp'])
    ->middleware('throttle:otp-request')
    ->name('login.request-otp');
Route::post('/login/verify', [OtpLoginController::class, 'verifyOtp'])
->middleware('throttle:otp-verify')
    ->name('login.verify');
Route::post('/login/password', [OtpLoginController::class, 'loginWithPassword'])
    ->middleware('throttle:5,1')
    ->name('login.password');
Route::get('/logout', function () {
    return redirect()->route('home');
})->name('logout.get');
Route::post('/logout', [OtpLoginController::class, 'logout'])->name('logout');

// API Routes for AJAX login
Route::get('/api/login/public-key', [OtpLoginController::class, 'getPublicKey'])->name('api.login.public-key');
Route::post('/api/login/password', [OtpLoginController::class, 'loginWithPasswordApi'])
    ->middleware('throttle:5,1')
    ->name('api.login.password');
Route::post('/api/login/request-otp', [OtpLoginController::class, 'requestOtpApi'])
    ->middleware('throttle:otp-request')
    ->name('api.login.request-otp');
Route::post('/api/login/verify-otp', [OtpLoginController::class, 'verifyOtpApi'])
    ->middleware('throttle:otp-verify')
    ->name('api.login.verify-otp');

/*
|--------------------------------------------------------------------------
| Password Reset Routes
|--------------------------------------------------------------------------
*/

// Route::get('/forgot-password', [PasswordResetController::class, 'showForgotPasswordForm'])->name('password.forgot');
// Route::post('/forgot-password', [PasswordResetController::class, 'sendResetLink'])
//     ->middleware('throttle:5,1')
//     ->name('password.forgot');
// Route::get('/reset-password', [PasswordResetController::class, 'showResetForm'])->name('password.reset');
// Route::post('/reset-password', [PasswordResetController::class, 'resetPassword'])
//     ->middleware('throttle:5,1')
//     ->name('password.reset');

/*
|--------------------------------------------------------------------------
| Customer Routes
|--------------------------------------------------------------------------
*/

Route::middleware(['auth'])->prefix('customer')->name('customer.')->group(function () {
    Route::get('/profile', [ProfileController::class, 'index'])->name('profile');
    Route::put('/profile', [ProfileController::class, 'update'])->name('profile.update');
    Route::put('/profile/password', [ProfileController::class, 'changePassword'])->name('profile.change-password');
    Route::post('/addresses', [ProfileController::class, 'storeAddress'])->name('addresses.store');
    Route::put('/addresses/{address}', [ProfileController::class, 'updateAddress'])->name('addresses.update');

    Route::get('/orders', [CustomerOrderController::class, 'index'])->name('orders.index');
    Route::get('/orders/{order}', [CustomerOrderController::class, 'show'])->name('orders.show');
    Route::post('/orders/{order}/retry-payment', [CustomerOrderController::class, 'retryPayment'])->name('orders.retry-payment');
    Route::get('/orders/{order}/ticket/create', [CustomerTicketController::class, 'create'])->name('orders.ticket.create');
    Route::post('/orders/{order}/ticket', [CustomerTicketController::class, 'store'])->name('orders.ticket.store');
    Route::get('/tickets', [CustomerTicketController::class, 'index'])->name('tickets.index');
    Route::get('/tickets/{ticket}', [CustomerTicketController::class, 'show'])->name('tickets.show');
    Route::post('/tickets/{ticket}/reply', [CustomerTicketController::class, 'reply'])->name('tickets.reply');
    Route::post('/tickets/{ticket}/close', [CustomerTicketController::class, 'close'])->name('tickets.close');
    Route::get('/notifications', [CustomerNotificationController::class, 'index'])->name('notifications.index');
    Route::post('/notifications/read-all', [CustomerNotificationController::class, 'markAllAsRead'])->name('notifications.read-all');
    Route::post('/notifications/{notification}/read', [CustomerNotificationController::class, 'markAsRead'])->name('notifications.read');
});

/*
|--------------------------------------------------------------------------
| Checkout Routes
|--------------------------------------------------------------------------
*/

Route::middleware(['auth'])->prefix('checkout')->name('checkout.')->group(function () {
    Route::get('/', [CheckoutController::class, 'index'])->name('index');
    Route::post('/address', [CheckoutController::class, 'storeAddress'])->name('address.store');
    Route::put('/address/{address}', [CheckoutController::class, 'updateAddress'])->name('address.update');
    Route::post('/create-razorpay-order', [CheckoutController::class, 'createRazorpayOrder'])->name('razorpay.create');
    Route::post('/verify-razorpay', [CheckoutController::class, 'verifyRazorpay'])->name('razorpay.verify');
    Route::post('/create-cod-order', [CheckoutController::class, 'createCodOrder'])->name('cod.create');
});

/*
|--------------------------------------------------------------------------
| Admin Routes
|--------------------------------------------------------------------------
*/

Route::middleware(['auth', CheckUserType::using('admin,staff')])->prefix('admin')->name('admin.')->group(function () {
    // Dashboard
    Route::get('/', [DashboardController::class, 'index'])->name('dashboard');
    Route::get('/dashboard/salesman-chart-data', [DashboardController::class, 'salesmanChartData'])->name('dashboard.salesman-chart-data');

    // Products
    // Read-only import templates — available at any location
    Route::get('/products/import/sample', [AdminProductController::class, 'downloadSample'])->name('products.download-sample');
    Route::get('/products/import/categories', [AdminProductController::class, 'downloadCategories'])->name('products.download-categories');

    // Catalogue writes (create/update/delete/import/variants) — warehouse location only
    Route::middleware(EnsureWarehouseCatalogueAccess::class)->group(function () {
        Route::get('/products/import', [AdminProductController::class, 'showImport'])->name('products.import.show');
        Route::post('/products/import', [AdminProductController::class, 'import'])->name('products.import');
        Route::get('/products/import/reports', [AdminProductController::class, 'importReports'])->name('products.import.reports');
        Route::get('/products/import/reports/{product_import}', [AdminProductController::class, 'importReportShow'])->name('products.import.report.show');

        Route::get('/products/variant/create', [AdminProductController::class, 'createVariant'])->name('products.variant.create');
        Route::post('/products/variant', [AdminProductController::class, 'storeVariant'])->name('products.variant.store');
        Route::get('/products/{product}/variant/edit', [AdminProductController::class, 'editVariant'])->name('products.variant.edit');
        Route::put('/products/{product}/variant', [AdminProductController::class, 'updateVariant'])->name('products.variant.update');
        Route::get('/products/variants/{variant}/edit', [AdminProductController::class, 'editVariantItem'])->name('products.variants.edit');
        Route::put('/products/variants/{variant}', [AdminProductController::class, 'updateVariantItem'])->name('products.variants.update');
        Route::delete('/products/variants/{variant}', [AdminProductController::class, 'destroyVariantItem'])->name('products.variants.destroy');

        Route::resource('products', AdminProductController::class)->except(['index', 'show']);

        Route::get('/products/{product}/purchase-price/edit', [AdminProductController::class, 'edit'])->name('products.purchase-prices.edit');
        Route::put('/products/{product}/purchase-price', [AdminProductController::class, 'update'])->name('products.purchase-prices.update');
        Route::post('/products/purchase-prices/bulk-update', [AdminProductController::class, 'bulkUpdate'])->name('products.purchase-prices.bulk-update');
        Route::get('/products/purchase-prices/import', [AdminProductController::class, 'importForm'])->name('products.purchase-prices.import');
        Route::post('/products/purchase-prices/import', [AdminProductController::class, 'importCsv'])->name('products.purchase-prices.import.process');
    });

    // Restock (must be before resource route to avoid route conflict) — allowed at store
    Route::get('/products/restock', [RestockController::class, 'index'])->name('products.restock')
        ->middleware([EnsureWarehouseCatalogueAccess::class, RoleOrPermissionMiddleware::class . ':admin|products.restock']);
    Route::post('/products/restock', [RestockController::class, 'store'])->name('products.restock.store')
        ->middleware([EnsureWarehouseCatalogueAccess::class, RoleOrPermissionMiddleware::class . ':admin|products.restock']);
    Route::post('/products/variants/{variant}/restock', [RestockController::class, 'storeVariant'])->name('products.variants.restock')
        ->middleware([EnsureWarehouseCatalogueAccess::class, RoleOrPermissionMiddleware::class . ':admin|products.restock']);

    // Stock Audit & Adjustments (Inventory)
    Route::get('/inventory/stock-audit', [StockAuditController::class, 'index'])->name('stock-audit.index')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|stock-audit.view');
    Route::get('/inventory/stock-audit/create', [StockAuditController::class, 'create'])->name('stock-audit.create')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|stock-audit.create');
    Route::post('/inventory/stock-audit', [StockAuditController::class, 'store'])->name('stock-audit.store')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|stock-audit.create');
    Route::get('/inventory/stock-audit/{stock_audit}/load-products', [StockAuditController::class, 'loadProducts'])->name('stock-audit.load-products')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|stock-audit.create');
    Route::post('/inventory/stock-audit/{stock_audit}/load-products', [StockAuditController::class, 'storeLoadProducts'])->name('stock-audit.load-products.store')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|stock-audit.create');
    Route::get('/inventory/stock-audit/{stock_audit}', [StockAuditController::class, 'show'])->name('stock-audit.show')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|stock-audit.view|stock-audit.create');
    Route::put('/inventory/stock-audit/{stock_audit}/physical-qty', [StockAuditController::class, 'updatePhysicalQty'])->name('stock-audit.physical-qty.update')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|stock-audit.create');
    Route::post('/inventory/stock-audit/{stock_audit}/generate-adjustments', [StockAuditController::class, 'generateAdjustments'])->name('stock-audit.generate-adjustments')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|stock-audit.create');
    Route::get('/inventory/stock-adjustments/manual', [StockAdjustmentController::class, 'manual'])->name('stock-adjustments.manual')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|stock-adjustments.manage');
    Route::post('/inventory/stock-adjustments/manual', [StockAdjustmentController::class, 'storeManual'])->name('stock-adjustments.manual.store')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|stock-adjustments.manage');
    Route::get('/inventory/stock-adjustments', [StockAdjustmentController::class, 'index'])->name('stock-adjustments.index')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|stock-adjustments.view');

    // Multi-store: locations, balances, transfers, purchase
    // Store switcher — any admin/staff (scoped by assigned stores in controller)
    Route::get('/locations/select', [LocationController::class, 'select'])->name('locations.select');
    Route::post('/locations/set-current', [LocationController::class, 'setCurrent'])->name('locations.set-current');

    Route::get('/locations', [LocationController::class, 'index'])->name('locations.index')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|locations.view|locations.manage');
    Route::get('/locations/create', [LocationController::class, 'create'])->name('locations.create')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|locations.manage');
    Route::post('/locations', [LocationController::class, 'store'])->name('locations.store')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|locations.manage');
    Route::get('/locations/{location}/edit', [LocationController::class, 'edit'])->name('locations.edit')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|locations.manage');
    Route::put('/locations/{location}', [LocationController::class, 'update'])->name('locations.update')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|locations.manage');

    Route::get('/inventory/balances', [InventoryBalanceController::class, 'index'])->name('inventory.balances')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|inventory.balances.view');

    Route::get('/transfers', [StockTransferController::class, 'index'])->name('transfers.index')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|transfers.view|transfers.manage');
    Route::get('/transfers/create', [StockTransferController::class, 'create'])->name('transfers.create')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|transfers.manage');
    Route::get('/transfers/products', [StockTransferController::class, 'products'])->name('transfers.products')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|transfers.manage');
    Route::post('/transfers', [StockTransferController::class, 'store'])->name('transfers.store')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|transfers.manage');
    Route::get('/transfers/{transfer}', [StockTransferController::class, 'show'])->name('transfers.show')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|transfers.view|transfers.manage');
    Route::post('/transfers/{transfer}/approve', [StockTransferController::class, 'approve'])->name('transfers.approve')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|transfers.approve');
    Route::post('/transfers/{transfer}/ship', [StockTransferController::class, 'ship'])->name('transfers.ship')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|transfers.ship');
    Route::post('/transfers/{transfer}/receive', [StockTransferController::class, 'receive'])->name('transfers.receive')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|transfers.receive');
    Route::post('/transfers/{transfer}/cancel', [StockTransferController::class, 'cancel'])->name('transfers.cancel')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|transfers.manage');

    Route::get('/suppliers', [SupplierController::class, 'index'])->name('suppliers.index')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|suppliers.manage');
    Route::post('/suppliers', [SupplierController::class, 'store'])->name('suppliers.store')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|suppliers.manage');

    Route::get('/purchase-orders', [PurchaseOrderController::class, 'index'])->name('purchase-orders.index')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|purchase-orders.view|purchase-orders.manage');
    Route::get('/purchase-orders/create', [PurchaseOrderController::class, 'create'])->name('purchase-orders.create')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|purchase-orders.manage');
    Route::post('/purchase-orders', [PurchaseOrderController::class, 'store'])->name('purchase-orders.store')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|purchase-orders.manage');
    Route::get('/purchase-orders/{purchase_order}', [PurchaseOrderController::class, 'show'])->name('purchase-orders.show')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|purchase-orders.view|purchase-orders.manage');
    Route::post('/purchase-orders/{purchase_order}/mark-ordered', [PurchaseOrderController::class, 'markOrdered'])->name('purchase-orders.mark-ordered')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|purchase-orders.manage');
    Route::post('/purchase-orders/{purchase_order}/receive', [PurchaseOrderController::class, 'receive'])->name('purchase-orders.receive')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|purchase-orders.receive');

    Route::get('/allocation-rules', [AllocationRuleController::class, 'index'])->name('allocation-rules.index')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|allocation-rules.manage');
    Route::put('/allocation-rules/{allocation_rule}', [AllocationRuleController::class, 'update'])->name('allocation-rules.update')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|allocation-rules.manage');
    Route::post('/allocation-rules/{allocation_rule}/toggle', [AllocationRuleController::class, 'toggle'])->name('allocation-rules.toggle')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|allocation-rules.manage');

    // Stock history (must be before resource route)
    Route::get('/products/{product}/stock-history', [AdminProductController::class, 'stockHistory'])->name('products.stock-history');
    
    // Barcode printing (must be before resource route)
    Route::get('/products/{product}/barcode/print', [BarcodeController::class, 'printLabel'])->name('products.barcode.print');
    Route::post('/products/column-preferences', [AdminProductController::class, 'saveColumnPreferences'])->name('products.column-preferences');
    
    // Variant products — read-only list/history at any location; writes gated above
    Route::get('/products/{product}/variants', [AdminProductController::class, 'showVariants'])->name('products.variants.index');
    Route::get('/products/variants/{variant}/stock-history', [AdminProductController::class, 'variantStockHistory'])->name('products.variants.stock-history');

    // Product list / show — allowed at store
    Route::resource('products', AdminProductController::class)->only(['index', 'show']);

    // Categories
    // Read-only sample CSV — available at any location
    Route::get('/categories/import/sample', [AdminCategoryController::class, 'downloadSample'])->name('categories.download-sample');
    Route::middleware(EnsureWarehouseCatalogueAccess::class)->group(function () {
        Route::post('/categories/import', [AdminCategoryController::class, 'import'])->name('categories.import');
        Route::resource('categories', AdminCategoryController::class)->except(['index', 'show']);
    });
    Route::resource('categories', AdminCategoryController::class)->only(['index']);

    // Brands — writes warehouse-only (catalogue master data)
    Route::middleware(EnsureWarehouseCatalogueAccess::class)->group(function () {
        Route::resource('brands', BrandController::class)->except(['index', 'show']);
    });
    Route::resource('brands', BrandController::class)->only(['index']);

    // Attributes — writes warehouse-only (catalogue master data)
    Route::middleware(EnsureWarehouseCatalogueAccess::class)->group(function () {
        Route::resource('attributes', AttributeController::class)->except(['index', 'show']);
        Route::post('/attributes/{attribute}/values', [AttributeValueController::class, 'store'])->name('attributes.values.store');
        Route::put('/attributes/values/{value}', [AttributeValueController::class, 'update'])->name('attributes.values.update');
        Route::delete('/attributes/values/{value}', [AttributeValueController::class, 'destroy'])->name('attributes.values.destroy');
    });
    Route::resource('attributes', AttributeController::class)->only(['index']);

    // Coupons
    Route::resource('coupons', AdminCouponController::class);

    // Banners
    Route::resource('banners', AdminBannerController::class);

    // Announcements
    Route::resource('announcements', AdminAnnouncementController::class);

    // Orders
    Route::get('/orders', [AdminOrderController::class, 'index'])->name('orders.index');
    Route::get('/orders/api', [AdminOrderController::class, 'apiIndex'])->name('orders.api.index');
    Route::get('/orders/{order}/invoice/print', [AdminOrderController::class, 'printInvoice'])->name('orders.invoice.print');
    Route::get('/orders/{order}', [AdminOrderController::class, 'show'])->name('orders.show');
    Route::put('/orders/{order}/status', [AdminOrderController::class, 'updateStatus'])->name('orders.update-status');
    Route::put('/orders/{order}/address', [AdminOrderController::class, 'updateAddress'])->name('orders.update-address');
    Route::post('/orders/{order}/check-delivery', [AdminOrderController::class, 'checkDeliveryAvailability'])->name('orders.check-delivery');
    Route::get('/order/label/{id}', [AdminOrderController::class, 'orderLabel'])->name('orderlabel.genarate');
    Route::get('/making-orders-pdf',[AdminOrderController::class, 'orderMakingLabels'])->name('making.orders.pdf');
    Route::get('/making-orders',[AdminOrderController::class, 'orderMakingLabels'])->name('making.orders.view');

    // Tickets
    Route::get('/tickets', [AdminTicketController::class, 'index'])->name('tickets.index')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|tickets.view');
    Route::get('/tickets/{ticket}', [AdminTicketController::class, 'show'])->name('tickets.show')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|tickets.view');
    Route::post('/tickets/{ticket}/pick', [AdminTicketController::class, 'pick'])->name('tickets.pick')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|tickets.assign');
    Route::post('/tickets/{ticket}/assign', [AdminTicketController::class, 'assign'])->name('tickets.assign')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|tickets.assign');
    Route::post('/tickets/{ticket}/reply', [AdminTicketController::class, 'reply'])->name('tickets.reply')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|tickets.reply');
    Route::put('/tickets/{ticket}/status', [AdminTicketController::class, 'updateStatus'])->name('tickets.update-status')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|tickets.update');

    // Shipping reference grids (view-only)
    Route::prefix('settings/shipping')->name('settings.shipping.')->group(function () {
        Route::get('/countries', [ShippingCountryController::class, 'index'])->name('countries');
        Route::patch('/countries/{country}/status', [ShippingCountryController::class, 'updateStatus'])->name('countries.status');
        Route::get('/states', [ShippingStateController::class, 'index'])->name('states');
        Route::patch('/states/{state}/status', [ShippingStateController::class, 'updateStatus'])->name('states.status');
        Route::get('/cities', [ShippingCityController::class, 'index'])->name('cities');
        Route::post('/cities', [ShippingCityController::class, 'store'])->name('cities.store');
        Route::patch('/cities/{city}/status', [ShippingCityController::class, 'updateStatus'])->name('cities.status');
    });
    
    // Shipments
    // Route::get('/orders/{order}/shipments/initiate', [AdminOrderController::class, 'initiateShipment'])->name('orders.shipments.initiate');
    Route::post('/orders/{order}/shipments', [AdminOrderController::class, 'storeShipment'])->name('orders.shipments.store');

    // POS (requires assigned store context)
    Route::get('/pos', [PosController::class, 'index'])->name('pos.index')
        ->middleware(EnsureStoreContext::class);
    
    // POS API Routes (using web middleware for session auth)
    Route::prefix('api/pos')->name('api.pos.')->middleware(EnsureStoreContext::class)->group(function () {
        // Products
        Route::get('/products', [PosProductController::class, 'index'])->name('products.index');
        Route::get('/products/{id}', [PosProductController::class, 'show'])->name('products.show');
        
        // Customers
        Route::get('/customers/walk-in', [PosCustomerController::class, 'getWalkInCustomer'])->name('customers.walk-in');
        Route::get('/customers/search', [PosCustomerController::class, 'search'])->name('customers.search');
        Route::post('/customers', [PosCustomerController::class, 'store'])->name('customers.store');
        Route::get('/customers/{customer}/addresses', [PosCustomerController::class, 'addresses'])->name('customers.addresses');
        Route::post('/customers/{customer}/addresses', [PosCustomerController::class, 'storeAddress'])->name('customers.addresses.store');
        
        // Staff
        Route::get('/staff', [PosStaffController::class, 'index'])->name('staff.index');
        
        // Orders (specific route must be before /orders/{id} to avoid "pos-recipt" matching as id)
        Route::post('/orders', [PosOrderController::class, 'store'])->name('orders.store');
        Route::get('/orders/pos-recipt/{id}', [PosOrderController::class, 'posRecipt'])->name('orders.recipt');
        Route::get('/orders/{id}', [PosOrderController::class, 'show'])->name('orders.show');
        Route::get('/shipping-charges', [PosOrderController::class, 'getShippingCharges'])->name('shipping-charges');
        
        // Discount OTP
        Route::post('/discount/request-otp', [PosOrderController::class, 'requestDiscountOtp'])->name('discount.request-otp');
        Route::post('/discount/verify-otp', [PosOrderController::class, 'verifyDiscountOtp'])->name('discount.verify-otp');
        
        // Sync
        Route::post('/sync', [PosSyncController::class, 'sync'])->name('sync');
    });

    // Shipping
    Route::post('/shipping/{order}/generate', [ShippingController::class, 'generateDelhivery'])->name('shipping.generate');
    Route::get('/shipping/{order}/track', [ShippingController::class, 'track'])->name('shipping.track');

    // Pickup Requests
    Route::get('/pickup-requests', [\App\Http\Controllers\Admin\PickupRequestController::class, 'index'])->name('pickup-requests.index');
    Route::get('/pickup-requests/send', [\App\Http\Controllers\Admin\PickupRequestController::class, 'send'])->name('pickup-requests.send');
    Route::get('/pickup-requests/create', [\App\Http\Controllers\Admin\PickupRequestController::class, 'create'])->name('pickup-requests.create');
    Route::post('/pickup-requests', [\App\Http\Controllers\Admin\PickupRequestController::class, 'store'])->name('pickup-requests.store');

    // Users
    Route::get('/users', [AdminUserController::class, 'index'])
        ->name('users.index')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|users.view');
    Route::get('/users/customers', [AdminUserController::class, 'customers'])
        ->name('users.customers')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|customers.view');
    Route::get('/users/staff', [AdminUserController::class, 'staff'])
        ->name('users.staff')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|staff.view');
    Route::get('/users/create', [AdminUserController::class, 'create'])
        ->name('users.create')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|staff.create');
    Route::post('/users', [AdminUserController::class, 'store'])
        ->name('users.store')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|staff.create');
    Route::get('/users/{user}/edit', [AdminUserController::class, 'edit'])
        ->name('users.edit')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|users.update|customers.update|staff.update');
    Route::put('/users/{user}', [AdminUserController::class, 'update'])
        ->name('users.update')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|users.update|customers.update|staff.update');
    Route::put('/users/{user}/assign-role', [AdminUserController::class, 'assignRole'])
        ->name('users.assign-role')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|customers.update|staff.update');
    Route::put('/users/{user}/ban', [AdminUserController::class, 'banUser'])
        ->name('users.ban')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|customers.update|staff.update');
    Route::put('/users/{user}/unban', [AdminUserController::class, 'unbanUser'])
        ->name('users.unban')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|customers.update|staff.update');
    Route::put('/users/{user}/change-password', [AdminUserController::class, 'changePassword'])
        ->name('users.change-password')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|customers.update|staff.update');
    Route::put('/users/{user}/update-customer-type', [AdminUserController::class, 'updateCustomerType'])
        ->name('users.update-customer-type')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|customers.update|staff.update');
    Route::put('/users/{user}/update-gst-number', [AdminUserController::class, 'updateGstNumber'])
        ->name('users.update-gst-number')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|customers.update|staff.update');

    // Roles
    Route::get('/roles', [RoleController::class, 'index'])
        ->name('roles.index')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|roles.view');
    Route::get('/roles/create', [RoleController::class, 'create'])
        ->name('roles.create')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|roles.create');
    Route::post('/roles', [RoleController::class, 'store'])
        ->name('roles.store')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|roles.create');
    Route::get('/roles/{role}/edit', [RoleController::class, 'edit'])
        ->name('roles.edit')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|roles.update');
    Route::put('/roles/{role}', [RoleController::class, 'update'])
        ->name('roles.update')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|roles.update');
    Route::delete('/roles/{role}', [RoleController::class, 'destroy'])
        ->name('roles.destroy')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|roles.delete');

    // Reports
    Route::get('/reports/sales', [ReportController::class, 'sales'])->name('reports.sales')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|reports.sales');
    Route::get('/reports/location-ops', [LocationReportController::class, 'index'])->name('reports.location-ops')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|reports.location-ops');
    Route::get('/reports/top-products', [ReportController::class, 'topProducts'])->name('reports.top-products')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|reports.top-products');
    Route::get('/reports/payments', [ReportController::class, 'payments'])->name('reports.payments')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|reports.payments');
    Route::get('/reports/payments/api/summary', [ReportController::class, 'paymentSummaryApi'])->name('reports.payments.api.summary')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|reports.payments');
    Route::get('/reports/payments/api/transactions', [ReportController::class, 'paymentTransactionsApi'])->name('reports.payments.api.transactions')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|reports.payments');
    Route::get('/reports/payments/export-csv', [ReportController::class, 'exportPaymentCsv'])->name('reports.payments.export-csv')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|reports.payments');
    Route::get('/reports/payment-health', [ReportController::class, 'paymentHealth'])->name('reports.payment-health')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|reports.payments');
    Route::get('/reports/payment-health/api/summary', [ReportController::class, 'paymentHealthApi'])->name('reports.payment-health.api.summary')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|reports.payments');
    
    // Profit Reports
    Route::get('/reports/profit', [ReportController::class, 'profit'])->name('reports.profit')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|reports.profit');
    Route::get('/reports/profit/by-product', [ReportController::class, 'profitByProduct'])->name('reports.profit.by-product')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|reports.profit');
    Route::get('/reports/profit/by-order', [ReportController::class, 'profitByOrder'])->name('reports.profit.by-order')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|reports.profit');
    Route::get('/reports/profit/export-csv', [ReportController::class, 'exportProfitCsv'])->name('reports.profit.export-csv')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|reports.profit');
    Route::get('/reports/missing-purchase-price', [ReportController::class, 'missingPurchasePrice'])->name('reports.missing-purchase-price')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|reports.profit');
    
    // Salesman Reports
    Route::get('/reports/salesman', [ReportController::class, 'salesmanReport'])->name('reports.salesman')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|reports.salesman');
    Route::get('/reports/salesman/export-csv', [ReportController::class, 'exportSalesmanCsv'])->name('reports.salesman.export-csv')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|reports.salesman');
    
    // GST Reports
    Route::get('/reports/gst', [ReportController::class, 'gst'])->name('reports.gst')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|reports.gst');
    Route::get('/reports/gst/export-csv', [ReportController::class, 'exportGstCsv'])->name('reports.gst.export-csv')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|reports.gst');
    Route::get('/reports/delivery', [DeliveryAnalyticsController::class, 'index'])->name('reports.delivery')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|reports.delivery');
    Route::get('/reports/delivery/api/kpis', [DeliveryAnalyticsController::class, 'kpis'])->name('reports.delivery.api.kpis')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|reports.delivery');
    Route::get('/reports/delivery/export-csv', [DeliveryAnalyticsController::class, 'exportCsv'])->name('reports.delivery.export-csv')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|reports.delivery');

    // Stock Audit & Adjustment Reports
    Route::get('/reports/stock-audit', [ReportController::class, 'stockAudit'])->name('reports.stock-audit')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|reports.stock-audit');
    Route::get('/reports/adjustment-history', [ReportController::class, 'adjustmentHistory'])->name('reports.adjustment-history')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|reports.stock-adjustments');
    Route::get('/reports/day-ledger', [LedgerController::class, 'index'])->name('reports.day-ledger')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|reports.day-ledger.view|reports.day-ledger.manage');
    Route::post('/reports/day-ledger/entries', [LedgerController::class, 'storeEntry'])->name('reports.day-ledger.entries.store')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|reports.day-ledger.manage');
    Route::post('/reports/day-ledger/close', [LedgerController::class, 'closeDay'])->name('reports.day-ledger.close')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|reports.day-ledger.close|reports.day-ledger.manage');
    Route::post('/reports/day-ledger/reopen', [LedgerController::class, 'reopenDay'])->name('reports.day-ledger.reopen')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|reports.day-ledger.reopen');
    Route::get('/reports/day-ledger/export-pdf', [LedgerController::class, 'exportPdf'])->name('reports.day-ledger.export-pdf')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|reports.day-ledger.view|reports.day-ledger.manage');
    Route::get('/reports/day-ledger/monthly-summary', [LedgerController::class, 'monthlySummary'])->name('reports.day-ledger.monthly-summary')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|reports.day-ledger.view|reports.day-ledger.manage');
    Route::get('/reports/day-ledger/payment-mode-summary', [LedgerController::class, 'paymentModeSummary'])->name('reports.day-ledger.payment-mode-summary')
        ->middleware(RoleOrPermissionMiddleware::class . ':admin|reports.day-ledger.view|reports.day-ledger.manage');

    // Product Purchase Price Management
    Route::get('/products/purchase-prices', [AdminProductController::class, 'index'])->name('products.purchase-prices.index');
    Route::get('/products/purchase-prices/export-csv', [AdminProductController::class, 'exportCsv'])->name('products.purchase-prices.export-csv');
    Route::get('/products/purchase-prices/template', [AdminProductController::class, 'downloadTemplate'])->name('products.purchase-prices.template');

    // Settings
    Route::get('/settings', [AdminSettingController::class, 'index'])->name('settings.index');
    Route::put('/settings', [AdminSettingController::class, 'update'])->name('settings.update');
    Route::put('/settings/payment', [AdminSettingController::class, 'updatePaymentSettings'])->name('settings.payment.update');
    Route::put('/settings/sms', [AdminSettingController::class, 'updateSmsSettings'])->name('settings.sms.update');
    Route::put('/settings/ticket', [AdminSettingController::class, 'updateTicketSettings'])->name('settings.ticket.update');
    Route::put('/settings/carriers', [AdminSettingController::class, 'updateCarrierSettings'])->name('settings.carriers.update');

    // SMS Templates
    Route::get('/sms-templates', [SmsTemplateController::class, 'index'])->name('sms-templates.index');
    Route::get('/sms-templates/create', [SmsTemplateController::class, 'create'])->name('sms-templates.create');
    Route::post('/sms-templates', [SmsTemplateController::class, 'store'])->name('sms-templates.store');
    Route::get('/sms-templates/{identifier}', [SmsTemplateController::class, 'show'])->name('sms-templates.show');
    Route::put('/sms-templates/{identifier}', [SmsTemplateController::class, 'update'])->name('sms-templates.update');
    
    // Shipping Methods
    Route::resource('shipping-methods', \App\Http\Controllers\Admin\ShippingMethodController::class)->names([
        'index' => 'shipping-methods.index',
        'create' => 'shipping-methods.create',
        'store' => 'shipping-methods.store',
        'edit' => 'shipping-methods.edit',
        'update' => 'shipping-methods.update',
        'destroy' => 'shipping-methods.destroy',
    ]);
    
    // Units — writes warehouse-only
    Route::middleware(EnsureWarehouseCatalogueAccess::class)->group(function () {
        Route::resource('units', \App\Http\Controllers\Admin\UnitController::class)->only([
            'create', 'store', 'edit', 'update', 'destroy',
        ])->names([
            'create' => 'units.create',
            'store' => 'units.store',
            'edit' => 'units.edit',
            'update' => 'units.update',
            'destroy' => 'units.destroy',
        ]);
    });
    Route::resource('units', \App\Http\Controllers\Admin\UnitController::class)->only(['index'])->names([
        'index' => 'units.index',
    ]);
    
    // Taxes — writes warehouse-only (catalogue master data); index readable anywhere
    Route::middleware(EnsureWarehouseCatalogueAccess::class)->group(function () {
        Route::resource('taxes', \App\Http\Controllers\Admin\TaxController::class)->only([
            'create', 'store', 'edit', 'update', 'destroy',
        ])->names([
            'create' => 'taxes.create',
            'store' => 'taxes.store',
            'edit' => 'taxes.edit',
            'update' => 'taxes.update',
            'destroy' => 'taxes.destroy',
        ]);
    });
    Route::resource('taxes', \App\Http\Controllers\Admin\TaxController::class)->only(['index'])->names([
        'index' => 'taxes.index',
    ]);
    
    // Carriers
    Route::resource('carriers', \App\Http\Controllers\Admin\CarrierController::class)->names([
        'index' => 'carriers.index',
        'create' => 'carriers.create',
        'store' => 'carriers.store',
        'edit' => 'carriers.edit',
        'update' => 'carriers.update',
        'destroy' => 'carriers.destroy',
    ]);
    
    // Reviews
    Route::get('/reviews', [AdminReviewController::class, 'index'])->name('reviews.index');
    Route::patch('/reviews/{id}/approve', [AdminReviewController::class, 'approve'])->name('reviews.approve');
    Route::delete('/reviews/{id}', [AdminReviewController::class, 'destroy'])->name('reviews.destroy');
    Route::get('/reviews/export-csv', [AdminReviewController::class, 'exportCsv'])->name('reviews.export-csv');
    
    Route::controller(WhatsappController::class)->group(function () {
        Route::get('/whatsapp-configuration', 'WhatsappConfigure')->name('whatsapp.config')->middleware(RoleOrPermissionMiddleware::class . ':admin');
        Route::get('/whatsapp-credits', 'WhatsappCredits')->name('whatsapp.credits')->middleware(RoleOrPermissionMiddleware::class . ':admin|whatsapp.credits');    
        Route::get('/whatsapp-templates', 'Whatsapptemplates')->name('whatsapp.templates')->middleware(RoleOrPermissionMiddleware::class . ':admin|whatsapp.templates');       
        Route::get('/whatsapp-credits/create', 'WhatsappCreditsCreate')->name('whatsapp.credits.create')->middleware(RoleOrPermissionMiddleware::class . ':admin');
        Route::get('/whatsapp-logs', 'WhatsappLogs')->name('whatsapp.logs')->middleware(RoleOrPermissionMiddleware::class . ':admin|whatsapp.logs');
        Route::get('/whatsapp-logs/detail/{id}', 'WhatsappLogsdetail')->name('whatsapp.logs.detail')->middleware(RoleOrPermissionMiddleware::class . ':admin|whatsapp.logs');    
        Route::post('/whatsappconfig-update', 'updatewhatsappconfig')->name('update_whatsappconfig')->middleware(RoleOrPermissionMiddleware::class . ':admin');
        Route::post('/whatsappcredits-create', 'createwhatsappcredits')->name('create-whatsappcredits')->middleware(RoleOrPermissionMiddleware::class . ':admin');
        Route::post('/whatsapptemplate-update', 'updateWhatsapptemplates')->name('update-whatsapptemplate')->middleware(RoleOrPermissionMiddleware::class . ':admin|whatsapp.templates');
    });  
});
