name('home');\n\nRoute::post('/analytics/visitor-ping', [\App\Http\Controllers\Cms\AnalyticsController::class, 'visitorPing'])\n ->middleware('throttle:60,1')\n ->name('analytics.visitor_ping');\n\nRoute::post('/analytics/cart-active-ping', [\App\Http\Controllers\Cms\AnalyticsController::class, 'cartActivePing'])\n ->middleware('throttle:60,1')\n ->name('analytics.cart_active_ping');\n Route::post('/analytics/live-event', [\App\Http\Controllers\Cms\AnalyticsController::class, 'liveEvent'])\n ->middleware('throttle:240,1')\n ->name('analytics.live_event');\nRoute::post('/meta-debug/pixel-log', [\App\Http\Controllers\Cms\MetaDebugController::class, 'pixelLog'])\n ->middleware('throttle:120,1')\n ->name('meta-debug.pixel-log');\n\n//Outlet route\nRoute::get('/category/outlet', [\App\Http\Controllers\Shop\CatalogController::class, 'index'])\n ->name('category.outlet');\n\n\n// ✅ Category browse (MEN / WOMEN / KIDS / nested)\nRoute::get('/category/{path}', [\App\Http\Controllers\Shop\CatalogController::class, 'index'])\n ->where('path', '.*')\n ->name('category.path');\n\n\n// ✅ (opsionale) e vjetra me ID – mbaje për kompatibilitet, por zhvendose në fund ose ndrysho URL\n//Route::get('/category-id/{id}', [CategoryController::class, 'show'])\n // ->whereNumber('id')\n //->name('category.show');\n// ✅ /category (index) — opsionet:\n// a) redirect te /category/men\nRoute::get('/category', [CategoryController::class, 'index'])->name('category.index');\n\n\n// ✅ (opsionale) route e vjetër me ID, mos e quaj /category/{id} se përplaset me path\nRoute::get('/category-id/{id}', [CategoryController::class, 'show'])\n ->whereNumber('id')\n ->name('category.show');\n\n// Static pages\nRoute::view('/terms', 'terms')->name('terms');\nRoute::view('/privacy', 'privacy')->name('privacy');\nRoute::view('/about-us', 'about-us')->name('about-us');\nRoute::view('/kidwearco-club', 'shop.kidwearco-club')\n ->name('kidwearco.club');\nRoute::get('/bli-sipas-moshes', function () {\n $ageCards = \Illuminate\Support\Facades\Cache::remember('page_age_cards', 300, function () {\n return app(\App\Services\HeaderAgeMenuService::class)->cards();\n });\n\n return view('shop.age-shopping', compact('ageCards'));\n})->name('shop.age-shopping');\n// Wishlist (listings)\nRoute::post('/wishlist/toggle', [ProductWishlistController::class, 'toggle'])\n ->name('wishlist.toggle')\n ->middleware(['auth', 'throttle:30,1']);\n\nRoute::get('/wishlist', [ProductWishlistController::class, 'index'])->name('wishlist.index');\n\n//Brand\nRoute::get('/brand/{brand:slug}', [BrandController::class, 'show'])->name('brand.show');\n\n\n\n// Search\nRoute::get('/search', [SearchController::class, 'index'])->name('search');\nRoute::get('/suggest', [SearchController::class, 'suggest'])\n ->name('search.suggest')\n ->middleware('throttle:60,1');\n\n\n //Newsletter\nRoute::post('/newsletter/subscribe', [NewsletterController::class, 'subscribe'])->name('newsletter.subscribe');\nRoute::get('/newsletter/confirm/{token}', [NewsletterController::class, 'confirm'])->name('newsletter.confirm');\nRoute::get('/newsletter/unsubscribe/{token}', [NewsletterController::class, 'unsubscribe'])->name('newsletter.unsubscribe'); \n\n// Likes (listings)\nRoute::post('/likes/toggle', [LikeController::class, 'toggle'])\n ->name('likes.toggle')\n ->middleware(['auth', 'throttle:30,1']);\n\n\n\n\n\n// FAQ (public)\nRoute::get('/faq', [PublicFaqController::class, 'index'])->name('faq.index');\n\n// Sitemap\nRoute::get('/sitemap.xml', [SitemapController::class, 'index'])->name('sitemap');\n\n\n\n\n\n// ✅ ACCOUNT (My Account)\nRoute::middleware(['auth'])->prefix('account')->name('account.')->group(function () {\n Route::get('/', fn() => redirect()->route('account.dashboard'))->name('home');\n\n Route::get('/dashboard', [\App\Http\Controllers\Account\AccountController::class, 'dashboard'])\n ->name('dashboard');\n\n Route::get('/orders', [\App\Http\Controllers\Account\OrderController::class, 'index'])\n ->name('orders');\n\n Route::get('/orders/{order}', [\App\Http\Controllers\Account\OrderController::class, 'show'])\n \n ->name('orders.show');\n \nRoute::view('/addresses', 'account.addresses.index')->name('addresses');\nRoute::get('/addresses', [\App\Http\Controllers\Account\AddressController::class, 'index'])->name('addresses');\nRoute::get('/addresses/create', [\App\Http\Controllers\Account\AddressController::class, 'create'])->name('addresses.create');\nRoute::post('/addresses', [\App\Http\Controllers\Account\AddressController::class, 'store'])->name('addresses.store');\nRoute::get('/addresses/{address}/edit', [\App\Http\Controllers\Account\AddressController::class, 'edit'])->name('addresses.edit');\nRoute::put('/addresses/{address}', [\App\Http\Controllers\Account\AddressController::class, 'update'])->name('addresses.update');\nRoute::delete('/addresses/{address}', [\App\Http\Controllers\Account\AddressController::class, 'destroy'])->name('addresses.destroy');\nRoute::get('/profile', [\App\Http\Controllers\Account\ProfileController::class, 'show'])->name('profile');\n\nRoute::get('/profile/email', [\App\Http\Controllers\Account\ProfileController::class, 'editEmail'])->name('profile.email');\nRoute::put('/profile/email', [\App\Http\Controllers\Account\ProfileController::class, 'updateEmail'])->name('profile.email.update');\n\nRoute::get('/profile/password', [\App\Http\Controllers\Account\ProfileController::class, 'editPassword'])->name('profile.password');\nRoute::put('/profile/password', [\App\Http\Controllers\Account\ProfileController::class, 'updatePassword'])->name('profile.password.update');\n\nRoute::get('/preferences', [\App\Http\Controllers\Account\ShoppingPreferencesController::class, 'index'])\n ->name('preferences');\n\n Route::post('/preferences', [\App\Http\Controllers\Account\ShoppingPreferencesController::class, 'store'])\n ->name('preferences.store');\n});\n\n// ======================================================\n// AUTH / GOOGLE / PASSWORD RESET\n// ======================================================\n\n// Social login Google\nRoute::get('/auth/google/redirect', [GoogleController::class, 'redirect'])->name('google.redirect');\nRoute::get('/auth/google/callback', [GoogleController::class, 'callback'])\n ->name('google.callback')\n ->withoutMiddleware([ForceEmailVerification::class]);\n\n// Password reset\nRoute::get('forgot-password', [PasswordResetLinkController::class, 'create'])\n ->name('password.request');\n\nRoute::post('forgot-password', [PasswordResetLinkController::class, 'store'])\n ->name('password.email');\n\nRoute::get('reset-password/{token}', [NewPasswordController::class, 'create'])\n ->name('password.reset');\n\nRoute::post('reset-password', [NewPasswordController::class, 'store'])\n ->name('password.store');\n\n// (Verification routes janë të komentuara te kodi yt origjinal; i lë po ashtu)\n// Route::get('/verify-code', [VerificationController::class, 'show'])->name('verify.code');\n// Route::post('/verify-code', [VerificationController::class, 'verify'])->name('verify.code.submit');\n// Route::post('/verify-code/resend', [VerificationController::class, 'resend'])\n// ->middleware(['auth'])\n// ->name('verify.code.resend');\n\n\n// ======================================================\n// USER AUTH ROUTES (PROFILE, MEDIA, ACCOUNT, NOTIFICATIONS)\n// ======================================================\n\nRoute::middleware('auth')->group(function () {\n // Profili (public edit route)\n Route::get('/profile', [ProfileController::class, 'edit'])->name('user.profile');\n\n // Avatar & cover\n Route::post('/profile/photo', [UserMediaController::class, 'updatePhoto'])\n ->name('user.profile.photo.update');\n\n Route::post('/profile/cover', [UserMediaController::class, 'updateCover'])\n ->name('user.profile.cover.update');\n\n // Fshirja e llogarisë\n Route::get('/fshij-llogarine', [ProfileController::class, 'confirmDelete'])->name('account.delete.confirm');\n Route::post('/fshij-llogarine', [ProfileController::class, 'deleteAccount'])->name('account.delete');\n\n Route::view('/settings/security', 'user.security')->name('settings.security');\n\n // Njoftimet (lista)\n Route::get('/notifications', [NotificationController::class, 'index'])->name('notifications.index');\n\n // Follow\n Route::post('/follow-toggle', [FollowController::class, 'toggle'])\n ->name('follow.toggle')\n ->middleware('throttle:30,1');\n\n Route::get('/my-followings', [FollowController::class, 'index'])\n ->name('follow.index');\n\n // Story report\n Route::post('/stories/{story}/report', [StoryReportController::class, 'store'])\n ->name('stories.report')\n ->middleware('throttle:30,1');\n\n // Listing rejection JSON (user API)\n Route::get('/user/api/listings/{id}/rejection', [UserListingController::class, 'rejectionJson'])\n ->name('user.api.listings.rejection');\n});\n\n// Notifications AJAX helpers\nRoute::post('/notifications/mark-badge-removed', [NotificationController::class, 'markBadgeRemoved'])\n ->middleware('auth');\n\nRoute::post('/notifications/{id}/mark-as-read', [NotificationController::class, 'markAsRead'])\n ->middleware('auth');\n\n\n// ======================================================\n// USER AREA (PREFIX /user)\n// ======================================================\n\nRoute::middleware(['auth'])->prefix('user')->group(function () {\n Route::get('/user/listings/success', function () {\n return view('user.listings.success');\n })->name('user.listings.success');\n\n Route::get('/dashboard', [UserDashboardController::class, 'index'])->name('user.dashboard');\n\n Route::resource('listings', UserListingController::class, ['as' => 'user']);\n\n Route::get('/profile', [ProfileController::class, 'edit'])->name('user.profile.edit');\n Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update');\n Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy');\n\n Route::get('/user/listings/{listing}/edit-update', [ListingController::class, 'editUpdate'])\n ->name('user.listings.editUpdate');\n\n Route::post('/user/listings/{listing}/edit-update', [UserListingController::class, 'storeUpdate'])\n ->name('user.listings.storeUpdate');\n});\n\n\n// ======================================================\n// STORIES (USER & API)\n// ======================================================\n\n// Krijimi dhe ruajtja e stories\nRoute::middleware('auth')->group(function () {\n Route::get('/stories/create', [StoryController::class, 'create'])->name('stories.create');\n Route::post('/stories', [StoryController::class, 'store'])->name('stories.store');\n Route::delete('/stories/{story}', [StoryController::class, 'destroy'])->name('stories.destroy');\n});\n\n// Story view tracking (API)\nRoute::post('/api/users/{user:id}/stories/view', [UserStoryController::class, 'markViewed'])\n ->middleware(['web', 'throttle:60,1']);\n\n\n// ======================================================\n// PROFILE REPORTS / USER REPORT\n// ======================================================\n\n// Reportim profili publik\nRoute::post('/users/{user}/report', [ProfileReportController::class, 'store'])\n ->name('users.report')\n ->middleware(['auth', 'throttle:5,1']);\n\n\n// ======================================================\n// TRACKING: Meta CAPI\n// ======================================================\n\nRoute::post('/capi/start-listing', [CapiController::class, 'startListing'])->name('capi.start_listing');\nRoute::post('/capi/listing-published', [CapiController::class, 'listingPublished'])->name('capi.listing_published');\nRoute::post('/capi/contact', [CapiController::class, 'contact'])->name('capi.contact');\n\n\n// ======================================================\n// SHOP (ECOMMERCE)\n// ======================================================\n\n// /shop home (catalog)\nRoute::get('/shop', [CatalogController::class, 'index'])->name('shop.index');\n// Produktet e reja - shfaq produktet e krijuara brenda 1 muaji\nRoute::get('/te-reja', [CatalogController::class, 'index'])->name('shop.new');\n// Shop wishlist & like (products)\n// Shop by age size: /per-femije-2-3-vjec\nRoute::get('/per-femije-{age}-vjec', [CatalogController::class, 'ageSize'])\n ->where('age', '[0-9]+-[0-9]+')\n ->name('shop.age-size');\nRoute::post('/shop/wishlist/toggle', [ProductWishlistController::class, 'toggle'])\n ->name('shop.wishlist.toggle');\nRoute::get('/shop/wishlist/has', [\n \App\Http\Controllers\Shop\ProductWishlistController::class,\n 'has'\n])->name('shop.wishlist.has');\n\nRoute::get('/shop/wishlist/count', [ProductWishlistController::class, 'count'])\n ->name('shop.wishlist.count');\n\nRoute::post('/shop/like/toggle', [ProductLikeController::class, 'toggle'])\n ->name('shop.like.toggle')\n ->middleware(['auth']); // Like vetëm për user-a të kyçur\n\n// /shop prefix\nRoute::prefix('shop')->name('shop.')->group(function () {\n // Cart\n Route::get('cart', [CartController::class, 'index'])->name('cart');\n Route::get('cart/mini', [CartController::class, 'mini'])->name('cart.mini');\n\n Route::post('cart/add/{product}', [CartController::class, 'add'])->name('cart.add');\n Route::post('cart/cross-sell/add/{product}', [CartController::class, 'add'])->name('cart.cross-sell.add');\n Route::post('cart/update/{product}', [CartController::class, 'update'])->name('cart.update');\n Route::post('cart/remove/{product}', [CartController::class, 'remove'])->name('cart.remove');\n Route::post('/shop/cart/coupon', [CartController::class, 'applyCoupon'])\n->name('cart.coupon');\n // Checkout\n // Checkout — guest checkout allowed\nRoute::get('checkout', [CheckoutController::class, 'index'])\n ->name('checkout');\nRoute::post('checkout/form-started', [CheckoutController::class, 'formStarted'])\n ->name('checkout.form_started');\n\nRoute::post('checkout/place-order', [CheckoutController::class, 'place'])\n ->name('checkout.place');\n\nRoute::get('checkout/success', [CheckoutController::class, 'success'])\n ->name('checkout.success');\nRoute::post('checkout/success/{order}/add/{product}', [CheckoutController::class, 'postPurchaseAdd'])\n ->name('checkout.post_purchase_add');\n // Orders (public view via order number)\n Route::get('order/{orderNumber}', [OrderController::class, 'show'])->name('order.show');\n// Social proof popup for product page\nRoute::get('social-proof/{product}', [ProductController::class, 'socialProof'])\n ->whereNumber('product')\n ->middleware('throttle:60,1')\n ->name('product.socialProof');\n \n // Product URLs\n Route::get('p/{slug}', [ProductController::class, 'showBySlug'])->name('product.slug');\n\n Route::get('{category}/{subcategory}/{slug}', [ProductController::class, 'showPretty'])\n ->where([\n 'category' => '[A-Za-z0-9\-]+',\n 'subcategory' => '[A-Za-z0-9\-]+',\n 'slug' => '[A-Za-z0-9\-]+',\n ])\n ->name('product.pretty');\n\n // Fallback me ID -> redirect te slug\n Route::get('product/{product}', function (\App\Models\Product $product) {\n return redirect()->route('shop.product.slug', ['slug' => $product->slug]);\n })->name('product.byId');\n});\n\nRoute::post('/chat/send', [\App\Http\Controllers\SupportChatController::class, 'send']);\nRoute::post('/telegram/webhook', [\App\Http\Controllers\TelegramWebhookController::class, 'handle']);\nRoute::get('/chat/messages', [\App\Http\Controllers\SupportChatController::class, 'messages']);\n// ======================================================\n// ADMIN LOGIN (CMS AUTH)\n// ======================================================\n\n// Admin login + 2FA te /cmss\nRoute::get('/cmss', function () {\n if (auth('admin')->check()) {\n return redirect()->route('cmss.dashboard');\n }\n\n return app(\App\Http\Controllers\Cms\AuthController::class)->showLoginForm();\n})->name('admin.login');\n\nRoute::post('/cmss', [AuthController::class, 'login'])\n ->middleware('guest:admin')\n ->name('admin.login.submit');\n\nRoute::get('/cmss/2fa', [AuthController::class, 'showTwoFactorForm'])\n ->middleware('guest:admin')\n ->name('admin.2fa.show');\n\nRoute::post('/cmss/2fa', [AuthController::class, 'verifyTwoFactor'])\n ->middleware('guest:admin')\n ->name('admin.2fa.verify');\n\nRoute::post('/cmss/logout', [AuthController::class, 'logout'])\n ->middleware('auth:admin')\n ->name('admin.logout');\n\n\n// ======================================================\n// ADMIN PROTECTED (CMS) prefix: /cmss\n// ======================================================\n\nRoute::middleware(['auth:admin', 'is_admin'])->prefix('cmss')->group(function () {\n\n // DASHBOARD\n Route::get('/dashboard', [DashboardController::class, 'index'])->name('cmss.dashboard');\n // DAILY BUSINESS REPORTS\n Route::get('/daily-business-reports', [DailyBusinessReportController::class, 'index'])\n ->name('cmss.daily-business-reports.index');\n\n Route::post('/daily-business-reports/sync-today', [DailyBusinessReportController::class, 'syncToday'])\n ->name('cmss.daily-business-reports.sync-today');\n\n Route::post('/daily-business-reports/sync-all', [DailyBusinessReportController::class, 'syncAll'])\n ->name('cmss.daily-business-reports.sync-all');\n // MONTHLY BUSINESS REPORTS\nRoute::get('/monthly-business-reports', [MonthlyBusinessReportController::class, 'index'])\n ->name('cmss.monthly-business-reports.index');\n//CMS ORDER CUSTOM\nRoute::get('/custom-print-orders', [CustomPrintOrderController::class, 'index'])\n ->name('cmss.custom-print-orders.index');\n\nRoute::post('/custom-print-orders/{customPrint}/status', [CustomPrintOrderController::class, 'updateStatus'])\n ->whereNumber('customPrint')\n ->name('cmss.custom-print-orders.status');\nRoute::post('/monthly-business-reports/sync-closed-months', [MonthlyBusinessReportController::class, 'syncClosedMonths'])\n ->name('cmss.monthly-business-reports.sync-closed-months');\n // DISCOUNT SUGGESTIONS\nRoute::get('/discount-suggestions', [DiscountSuggestionController::class, 'index'])\n ->name('cmss.discount-suggestions.index');\n Route::get('/product-opportunity', [ProductOpportunityController::class, 'index'])\n ->name('cmss.product-opportunity.index');\n\nRoute::get('/product-opportunity/{product}/factors', [ProductOpportunityController::class, 'factors'])\n ->name('cmss.product-opportunity.factors');\n\nRoute::post('/product-opportunity/recompute', [ProductOpportunityController::class, 'recompute'])\n ->name('cmss.product-opportunity.recompute');\n\n// SOCIAL PROOF SETTINGS\nRoute::get('/social-proof-settings', [SocialProofSettingController::class, 'edit'])\n ->name('cmss.social-proof-settings.edit');\n\nRoute::post('/social-proof-settings', [SocialProofSettingController::class, 'update'])\n ->name('cmss.social-proof-settings.update');\n // ANALYTICS\n Route::get('/analytics', [\App\Http\Controllers\Cms\AnalyticsController::class, 'index'])\n ->name('cmss.analytics.index');\n Route::get('/analytics/smart-sections', [\App\Http\Controllers\Cms\AnalyticsController::class, 'smartSections'])\n ->name('cmss.analytics.smart-sections');\n\n Route::get('/analytics/live', [\App\Http\Controllers\Cms\AnalyticsController::class, 'live'])\n ->name('cmss.analytics.live');\n\n Route::post('/analytics/reset', [\App\Http\Controllers\Cms\AnalyticsController::class, 'reset'])\n ->name('cmss.analytics.reset');\nRoute::get('/meta-debug', [\App\Http\Controllers\Cms\MetaDebugController::class, 'index'])\n ->name('cmss.meta-debug.index');\n Route::get('/meta-catalog-health', [\App\Http\Controllers\Cms\MetaCatalogHealthController::class, 'index'])\n ->name('cmss.meta-catalog-health.index');\n Route::post('/meta-catalog-health/{variant}/resync', [\App\Http\Controllers\Cms\MetaCatalogHealthController::class, 'resyncVariant'])\n ->name('cmss.meta-catalog-health.resync-variant');\n Route::get('/marketing-attribution', [\App\Http\Controllers\Cms\MarketingAttributionReportController::class, 'index'])\n ->name('cmss.marketing-attribution.index');\n Route::get('/meta-ads', [\App\Http\Controllers\Cms\MetaAdsInsightsController::class, 'index'])\n ->name('cmss.meta-ads.index');\n // Profile (CMS – i bllokuar)\n Route::get('/profile', function () {\n abort(403, 'Nuk ke qasje në këtë seksion!');\n })->name('profile.edit');\n Route::prefix('finance')\n ->name('cmss.finance.')\n ->middleware('can:finance.view')\n ->group(function () {\n Route::prefix('suppliers')\n ->name('suppliers.')\n ->middleware('can:finance.suppliers.manage')\n ->group(function () {\n Route::get('/', [\n FinanceSupplierController::class,\n 'index',\n ])->name('index');\n\n Route::get('/create', [\n FinanceSupplierController::class,\n 'create',\n ])->name('create');\n\n Route::post('/', [\n FinanceSupplierController::class,\n 'store',\n ])->name('store');\n\n Route::get('/trash', [\n FinanceSupplierController::class,\n 'trash',\n ])->name('trash');\n\n Route::post('/trash/{supplierId}/restore', [\n FinanceSupplierController::class,\n 'restore',\n ])\n ->whereNumber('supplierId')\n ->name('restore');\n\n Route::get('/{supplier}/edit', [\n FinanceSupplierController::class,\n 'edit',\n ])->name('edit');\n\n Route::put('/{supplier}', [\n FinanceSupplierController::class,\n 'update',\n ])->name('update');\n\n Route::post('/{supplier}/toggle-active', [\n FinanceSupplierController::class,\n 'toggleActive',\n ])->name('toggle-active');\n\n Route::delete('/{supplier}', [\n FinanceSupplierController::class,\n 'destroy',\n ])->name('destroy');\n });\n Route::get('/cash-movements', [\n FinanceCashMovementController::class,\n 'index',\n])\n ->middleware(\n 'can:finance.cash-movements.manage'\n )\n ->name('cash-movements.index');\n\nRoute::get('/cash-movements/create', [\n FinanceCashMovementController::class,\n 'create',\n])\n ->middleware(\n 'can:finance.cash-movements.manage'\n )\n ->name('cash-movements.create');\n\nRoute::post('/cash-movements', [\n FinanceCashMovementController::class,\n 'store',\n])\n ->middleware(\n 'can:finance.cash-movements.manage'\n )\n ->name('cash-movements.store');\n\nRoute::post('/cash-movements/{movement}/post', [\n FinanceCashMovementController::class,\n 'post',\n])\n ->middleware(\n 'can:finance.cash-movements.manage'\n )\n ->name('cash-movements.post');\n Route::get('/transactions', [\n FinanceTransactionController::class,\n 'index',\n])->name('transactions.index');\n\nRoute::get('/transactions/{entry}', [\n FinanceTransactionController::class,\n 'show',\n])->name('transactions.show');\n Route::get('/', [\n FinanceDashboardController::class,\n 'index',\n])->name('dashboard');\n Route::get('/opening-balance', [\n FinanceOpeningBalanceController::class,\n 'show',\n])\n ->middleware('can:finance.opening-balance.manage')\n ->name('opening-balance.show');\n\nRoute::post('/opening-balance', [\n FinanceOpeningBalanceController::class,\n 'store',\n])\n ->middleware('can:finance.opening-balance.manage')\n ->name('opening-balance.store');\n Route::get('/expenses', [\n FinanceExpenseController::class,\n 'index',\n ])->name('expenses.index');\n\n Route::get('/expenses/create', [\n FinanceExpenseController::class,\n 'create',\n ])\n ->middleware('can:finance.create')\n ->name('expenses.create');\n\n Route::post('/expenses', [\n FinanceExpenseController::class,\n 'store',\n ])\n ->middleware('can:finance.create')\n ->name('expenses.store');\n\n Route::post('/expenses/{expense}/post', [\n FinanceExpenseController::class,\n 'post',\n ])\n ->middleware('can:finance.post')\n ->name('expenses.post');\n });\n \n\n // BANNERS (legacy)\n Route::resource('banners', BannerController::class);\n Route::post('banners/reorder', [BannerController::class, 'reorder'])->name('banners.reorder');\n\n\n // AD BANNERS\n Route::resource('ad_banners', AdBannerController::class)->except(['show']);\n Route::get('ad_banners/stats', [AdBannerController::class, 'stats'])->name('ad_banners.stats');\n //Route::get('/ad-banners/{id}/edit', [AdBannerController::class, 'edit'])->name('ad_banners.edit');\n //Route::put('/ad-banners/{id}', [AdBannerController::class, 'update'])->name('ad_banners.update');\n\n // LISTINGS (CMS)\n Route::get('/listings', [CmsListingController::class, 'index'])->name('cmss.listings');\n Route::get('/listings/{listing}', [ListingController::class, 'show'])->name('listings.show');\n Route::patch('/cmss/listings/{listing}/approve', [CmsListingController::class, 'approve'])->name('listings.approve');\n Route::patch('/cmss/listings/{listing}/reject', [CmsListingController::class, 'reject'])->name('listings.reject');\n\n // LISTING UPDATES (pending)\n Route::get('/listing-updates/{id}', [CmsListingController::class, 'showUpdate'])->name('listing-updates.show');\n\n // LISTING REPORTS (CMS)\n Route::get('/reports', [CmsListingReportController::class, 'index'])->name('cms.reports.index');\n Route::get('/reports/{report}', [CmsListingReportController::class, 'show'])->name('cms.reports.show');\n Route::patch('/reports/{report}/status', [CmsListingReportController::class, 'updateStatus'])->name('cms.reports.update-status');\n Route::delete('/reports/{report}', [CmsListingReportController::class, 'destroy'])->name('cms.reports.destroy');\n\n // SPONSORED LISTINGS (CMS)\n Route::post('/sponsored/create', [ListingSponsoredController::class, 'create'])->name('cms.sponsored.create');\n Route::get('/sponsored', [ListingSponsoredController::class, 'index'])->name('cms.sponsored.index');\n Route::post('/sponsored/{id}/toggle', [ListingSponsoredController::class, 'toggle'])->name('cms.sponsored.toggle');\n\n // STORY REPORTS (CMS)\n Route::get('/story-reports', [CmsStoryReportController::class, 'index'])->name('cmss.story_reports.index');\n Route::delete('/story-reports/{report}', [CmsStoryReportController::class, 'destroy'])->name('cmss.story_reports.destroy');\n Route::delete('/story-reports', [CmsStoryReportController::class, 'bulkDestroy'])->name('cmss.story_reports.bulk_destroy');\n Route::delete('/stories/{story}/delete', [CmsStoryReportController::class, 'destroyStory'])->name('cmss.story_reports.destroy_story');\n\n // STORIES (CMS – manual create)\n Route::get('/stories', [CmsStoryController::class, 'index'])->name('cmss.stories.index');\n Route::get('/stories/create', [CmsStoryController::class, 'create'])->name('cmss.stories.create');\n Route::post('/stories', [CmsStoryController::class, 'store'])->name('cmss.stories.store');\n\n //FILTER_FIELDS\n Route::resource('filter-fields', \App\Http\Controllers\Cms\FilterFieldController::class)\n ->except(['show']);\nRoute::prefix('checkout-cross-sell')->name('cms.checkout-cross-sell.')->group(function () {\n Route::get('/', [CheckoutCrossSellOfferController::class, 'index'])->name('index');\n Route::get('/create', [CheckoutCrossSellOfferController::class, 'create'])->name('create');\n Route::post('/', [CheckoutCrossSellOfferController::class, 'store'])->name('store');\n Route::get('/{checkoutCrossSell}/edit', [CheckoutCrossSellOfferController::class, 'edit'])->name('edit');\n Route::put('/{checkoutCrossSell}', [CheckoutCrossSellOfferController::class, 'update'])->name('update');\n Route::delete('/{checkoutCrossSell}', [CheckoutCrossSellOfferController::class, 'destroy'])->name('destroy');\n Route::get('/product-search', [CheckoutCrossSellOfferController::class, 'productSearch'])->name('product-search');\n});\n // =====================\n// CATEGORY TILES (CMS)\n// =====================\nRoute::get('/category-tiles', [\App\Http\Controllers\Cms\CategoryTileController::class, 'index'])->name('category_tiles.index');\nRoute::get('/category-tiles/create', [\App\Http\Controllers\Cms\CategoryTileController::class, 'create'])->name('category_tiles.create');\nRoute::post('/category-tiles', [\App\Http\Controllers\Cms\CategoryTileController::class, 'store'])->name('category_tiles.store');\nRoute::get('/category-tiles/{tile}/edit', [\App\Http\Controllers\Cms\CategoryTileController::class, 'edit'])->name('category_tiles.edit');\nRoute::put('/category-tiles/{tile}', [\App\Http\Controllers\Cms\CategoryTileController::class, 'update'])->name('category_tiles.update');\nRoute::delete('/category-tiles/{tile}', [\App\Http\Controllers\Cms\CategoryTileController::class, 'destroy'])->name('category_tiles.destroy');\n\n\n\n // HEADER MENUS (CMS)\n // HEADER MENUS (CMS)\n Route::get('/header-menus', [HeaderMenuController::class, 'index'])\n ->name('cmss.header_menus.index');\n\n Route::get('/header-menus/create', [HeaderMenuController::class, 'create'])\n ->name('cmss.header_menus.create');\n\n Route::post('/header-menus', [HeaderMenuController::class, 'store'])\n ->name('cmss.header_menus.store');\n\n // Edito një menu ekzistuese\nRoute::get('/header-menus/{menu}/edit', [HeaderMenuController::class, 'edit'])\n ->name('cmss.header_menus.edit');\n\n// Përditëso një menu\nRoute::put('/header-menus/{menu}', [HeaderMenuController::class, 'update'])\n ->name('cmss.header_menus.update');\n\n// Fshij një menu\nRoute::delete('/header-menus/{menu}', [HeaderMenuController::class, 'destroy'])\n ->name('cmss.header_menus.destroy');\n\n // Kolonat për një header_menu specifik (mega-menu columns)\n Route::get('/header-menus/{menu}/columns', [HeaderMenuColumnController::class, 'index'])\n ->name('cmss.header_menu_columns.index');\n Route::get('/header-menus/{menu}/columns/create', [HeaderMenuColumnController::class, 'create'])\n ->name('cmss.header_menu_columns.create');\n\nRoute::post('/header-menus/{menu}/columns', [HeaderMenuColumnController::class, 'store'])\n ->name('cmss.header_menu_columns.store');\n\n // Menaxhimi i markave (logo) për një kolonë të caktuar (type=brands)\nRoute::get('/header-menu-columns/{column}/brands', [HeaderMenuBrandController::class, 'index'])\n ->name('cmss.header_menu_brands.index');\n\n Route::get('/header-menu-columns/{column}/brands/create', [HeaderMenuBrandController::class, 'create'])\n ->name('cmss.header_menu_brands.create');\n\nRoute::post('/header-menu-columns/{column}/brands', [HeaderMenuBrandController::class, 'store'])\n ->name('cmss.header_menu_brands.store');\n // GRUPET për një kolonë të caktuar (type = groups)\n Route::get('/header-menu-columns/{column}/groups', [HeaderMenuGroupController::class, 'index'])\n ->name('cmss.header_menu_groups.index');\n\n Route::get('/header-menu-columns/{column}/groups/create', [HeaderMenuGroupController::class, 'create'])\n ->name('cmss.header_menu_groups.create');\n\n Route::post('/header-menu-columns/{column}/groups', [HeaderMenuGroupController::class, 'store'])\n ->name('cmss.header_menu_groups.store');\n\n Route::get('/header-menu-columns/{column}/groups/{group}/edit', [HeaderMenuGroupController::class, 'edit'])\n ->name('cmss.header_menu_groups.edit');\n\n Route::post('/header-menu-columns/{column}/groups/{group}', [HeaderMenuGroupController::class, 'update'])\n ->name('cmss.header_menu_groups.update');\n\n Route::post('/header-menu-columns/{column}/groups/{group}/delete', [HeaderMenuGroupController::class, 'destroy'])\n ->name('cmss.header_menu_groups.destroy');\n // ITEM-ët për një grup (Sneakers, Running, Lifestyle, etj.)\n Route::get('/header-menu-groups/{group}/items', [HeaderMenuItemController::class, 'index'])\n ->name('cmss.header_menu_items.index');\n\n Route::get('/header-menu-groups/{group}/items/create', [HeaderMenuItemController::class, 'create'])\n ->name('cmss.header_menu_items.create');\n\n Route::post('/header-menu-groups/{group}/items', [HeaderMenuItemController::class, 'store'])\n ->name('cmss.header_menu_items.store');\n\n Route::get('/header-menu-groups/{group}/items/{item}/edit', [HeaderMenuItemController::class, 'edit'])\n ->name('cmss.header_menu_items.edit');\n\n Route::post('/header-menu-groups/{group}/items/{item}', [HeaderMenuItemController::class, 'update'])\n ->name('cmss.header_menu_items.update');\n\n Route::post('/header-menu-groups/{group}/items/{item}/delete', [HeaderMenuItemController::class, 'destroy'])\n ->name('cmss.header_menu_items.destroy');\nRoute::get('header-menu-columns/{column}/brands/{brand}/edit', [HeaderMenuBrandController::class, 'edit'])\n ->name('cmss.header_menu_brands.edit');\n\nRoute::put('header-menu-columns/{column}/brands/{brand}', [HeaderMenuBrandController::class, 'update'])\n ->name('cmss.header_menu_brands.update');\n\n // PROMO-t për një kolonë (type = promos)\n Route::get('/header-menu-columns/{column}/promos', [HeaderMenuPromoController::class, 'index'])\n ->name('cmss.header_menu_promos.index');\n\n Route::get('/header-menu-columns/{column}/promos/create', [HeaderMenuPromoController::class, 'create'])\n ->name('cmss.header_menu_promos.create');\n\n Route::post('/header-menu-columns/{column}/promos', [HeaderMenuPromoController::class, 'store'])\n ->name('cmss.header_menu_promos.store');\n\n Route::get('/header-menu-columns/{column}/promos/{promo}/edit', [HeaderMenuPromoController::class, 'edit'])\n ->name('cmss.header_menu_promos.edit');\n\n Route::post('/header-menu-columns/{column}/promos/{promo}', [HeaderMenuPromoController::class, 'update'])\n ->name('cmss.header_menu_promos.update');\n\n Route::post('/header-menu-columns/{column}/promos/{promo}/delete', [HeaderMenuPromoController::class, 'destroy'])\n ->name('cmss.header_menu_promos.destroy');\n\n // SIZES për një kolonë (type = sizes)\nRoute::get('/header-menu-columns/{column}/sizes', [HeaderMenuSizeController::class, 'index'])\n ->name('cmss.header_menu_sizes.index');\n\nRoute::get('/header-menu-columns/{column}/sizes/create', [HeaderMenuSizeController::class, 'create'])\n ->name('cmss.header_menu_sizes.create');\n\nRoute::post('/header-menu-columns/{column}/sizes', [HeaderMenuSizeController::class, 'store'])\n ->name('cmss.header_menu_sizes.store');\n\nRoute::get('/header-menu-columns/{column}/sizes/{size}/edit', [HeaderMenuSizeController::class, 'edit'])\n ->name('cmss.header_menu_sizes.edit');\n\nRoute::post('/header-menu-columns/{column}/sizes/{size}', [HeaderMenuSizeController::class, 'update'])\n ->name('cmss.header_menu_sizes.update');\n\nRoute::post('/header-menu-columns/{column}/sizes/{size}/delete', [HeaderMenuSizeController::class, 'destroy'])\n ->name('cmss.header_menu_sizes.destroy');\nRoute::get('/header-age-menu', [\App\Http\Controllers\Cms\HeaderAgeMenuController::class, 'index'])\n ->name('cmss.header-age-menu.index');\n\nRoute::post('/header-age-menu/{bucket}', [\App\Http\Controllers\Cms\HeaderAgeMenuController::class, 'update'])\n ->where('bucket', '[0-9]+-[0-9]+')\n ->name('cmss.header-age-menu.update');\n\nRoute::post('orders/{order}/send-to-posta', [\App\Http\Controllers\Cms\IntegrationOrderController::class, 'sendToPosta'])\n ->whereNumber('order')\n ->name('orders.integrations.posta.send');\nRoute::get('/integrations/posta/token', [\App\Http\Controllers\Cms\PostaTokenController::class, 'index'])\n ->name('cms.integrations.posta.token.index');\n\nRoute::post('/integrations/posta/token', [\App\Http\Controllers\Cms\PostaTokenController::class, 'store'])\n ->name('cms.integrations.posta.token.store');\n\n\n\n // Story Groups (Bubble)\n Route::get('/story-groups', [\App\Http\Controllers\Cms\StoryGroupController::class, 'index'])->name('story-groups.index');\n Route::get('/story-groups/create', [\App\Http\Controllers\Cms\StoryGroupController::class, 'create'])->name('story-groups.create');\n Route::post('/story-groups', [\App\Http\Controllers\Cms\StoryGroupController::class, 'store'])->name('story-groups.store');\n Route::get('/story-groups/{story_group}/edit', [\App\Http\Controllers\Cms\StoryGroupController::class, 'edit'])->name('story-groups.edit');\n // Slides (Stories) brenda nje bubble\n Route::post('/story-groups/{story_group}/slides', [\App\Http\Controllers\Cms\StorySlideController::class, 'store'])->name('story-slides.store');\n Route::delete('/story-slides/{story}', [\App\Http\Controllers\Cms\StorySlideController::class, 'destroy'])->name('story-slides.destroy');\n\n // PROFILE REPORTS (CMS)\n Route::get('/profile-reports', [CmsProfileReportController::class, 'index'])->name('cms.profile_reports.index');\n Route::patch('/profile-reports/{report}/status', [CmsProfileReportController::class, 'updateStatus'])->name('cms.profile_reports.updateStatus');\nRoute::get('/customer-points', [CustomerPointsController::class, 'index'])\n ->name('cmss.customer-points.index');\n\nRoute::post('/customer-points/{user}/adjust', [CustomerPointsController::class, 'adjust'])\n ->name('cmss.customer-points.adjust');\n\n // BRANDS & PRODUCTS (SINGLE ECOMMERCE)\n Route::resource('brands', BrandsController::class)->except(['show']);\n Route::get('products/product-search', [ProductsController::class, 'productSearch'])\n ->name('products.product-search');\n Route::resource('products', ProductsController::class)->except(['show']);\n Route::get('stock', [StockController::class, 'index'])->name('cmss.stock.index');\n Route::get('landing-pages/product-search', [\App\Http\Controllers\Cms\LandingPageController::class, 'productSearch'])\n ->name('landing-pages.product-search');\n Route::resource('landing-pages', \App\Http\Controllers\Cms\LandingPageController::class)\n ->except(['show']);\nRoute::resource('item-types', ItemTypesController::class)\n ->names('cms.item-types');\n Route::get('products/import', [ProductImportController::class, 'showForm'])->name('products.import.form');\n Route::post('products/import', [ProductImportController::class, 'import'])->name('products.import.run');\nRoute::post('products/import-variant-prices', [ProductImportController::class, 'importVariantPrices'])\n ->name('products.import.variant-prices');\n Route::get('products/import/meta-sync-status/{syncId}', [ProductImportController::class, 'metaSyncStatus'])\n ->name('products.import.meta-sync-status');\n Route::post('products/import/meta-sync-clear', [ProductImportController::class, 'clearMetaSyncStatus'])\n ->name('products.import.meta-sync-clear');\n\n// BOXES (CMS)\nRoute::get('boxes', [\App\Http\Controllers\Cms\BoxesController::class, 'index'])\n ->name('cmss.boxes.index');\nRoute::get('boxes/data', [\App\Http\Controllers\Cms\BoxesController::class, 'data'])\n ->name('cmss.boxes.data');\nRoute::post('boxes/release', [\App\Http\Controllers\Cms\BoxesController::class, 'release'])\n ->name('cmss.boxes.release');\n\n // ORDERS (CMS)\nRoute::get('orders', [CmsOrderController::class, 'index'])->name('orders.index');\nRoute::get('orders/{order}', [CmsOrderController::class, 'show'])->name('orders.show');\nRoute::post('orders/{order}/status', [CmsOrderController::class, 'updateStatus'])->name('orders.status');\nRoute::post('orders/{order}/comments', [CmsOrderController::class, 'addComment'])->name('orders.comments.add');\n\nRoute::post('orders/{order}/items/{item}/cancel-quantity', [CmsOrderController::class, 'cancelItemQuantity'])\n ->name('orders.items.cancelQuantity');\n\nRoute::get('orders/{order}/print', [CmsOrderController::class, 'print'])->name('orders.print');\nRoute::post('/orders/{order}/shipping/toggle', [\App\Http\Controllers\Cms\OrderController::class, 'toggleShipping'])\n ->name('orders.shipping.toggle');\nRoute::post('/orders/{order}/send-to-posta', [\App\Http\Controllers\Cms\IntegrationOrderController::class, 'sendToPosta'])\n ->whereNumber('order')\n ->name('orders.integrations.posta.send');\n\n // Product options & variants\n Route::post('products/{product}/options', [ProductVariantController::class, 'saveOptions'])->name('cmss.products.options.save');\n Route::post('products/{product}/variants', [ProductVariantController::class, 'upsertVariants'])->name('cmss.products.variants.upsert');\n Route::post('products/{product}/variants/apply-discount', [ProductVariantController::class, 'applyDiscount'])\n ->name('cmss.products.variants.applyDiscount');\n\nRoute::post('products/{product}/variants/{variant}/supply', [ProductVariantController::class, 'addSupply'])\n ->name('cmss.products.variants.supply');\n\n Route::post('products/{product}/variants/{variant}/remove-stock', [ProductVariantController::class, 'removeStock'])\n ->name('cmss.products.variants.removeStock');\n\nRoute::delete('products/{product}/variants/{variant}', [ProductVariantController::class, 'deleteVariant'])->name('cmss.products.variants.delete');\nRoute::post('products/{product}/variants/clear-all', [ProductVariantController::class, 'clearAll'])\n ->name('products.variants.clearAll');\n\n // Global Discounts\n Route::prefix('discounts')->name('cms.discounts.')->group(function () {\n Route::get('/', [GlobalDiscountController::class, 'index'])->name('index');\n Route::get('/create', [GlobalDiscountController::class, 'create'])->name('create');\n Route::post('/', [GlobalDiscountController::class, 'store'])->name('store');\n Route::get('/{discount}/edit', [GlobalDiscountController::class, 'edit'])->name('edit');\n Route::post('/{discount}', [GlobalDiscountController::class, 'update'])->name('update');\n Route::post('/{discount}/toggle', [GlobalDiscountController::class, 'toggle'])->name('toggle');\n Route::delete('/{discount}', [GlobalDiscountController::class, 'destroy'])->name('destroy');\n });\n\n // FAQ (CMS)\n Route::get('/faqs', [CmsFaqController::class, 'index'])->name('cms.faqs.index');\n Route::get('/faqs/create', [CmsFaqController::class, 'create'])->name('cms.faqs.create');\n Route::post('/faqs', [CmsFaqController::class, 'store'])->name('cms.faqs.store');\n Route::get('/faqs/{id}/edit', [CmsFaqController::class, 'edit'])->name('cms.faqs.edit');\n Route::put('/faqs/{id}', [CmsFaqController::class, 'update'])->name('cms.faqs.update');\n Route::delete('/faqs/{id}', [CmsFaqController::class, 'destroy'])->name('cms.faqs.destroy');\n\n\n //Spotlight CMS\n\n Route::get('/spotlight', [SpotlightItemController::class, 'index'])->name('cms.spotlight.index');\n Route::get('/spotlight/create', [SpotlightItemController::class, 'create'])->name('cms.spotlight.create');\n Route::post('/spotlight', [SpotlightItemController::class, 'store'])->name('cms.spotlight.store');\n Route::get('/spotlight/{item}/edit', [SpotlightItemController::class, 'edit'])->name('cms.spotlight.edit');\n Route::put('/spotlight/{item}', [SpotlightItemController::class, 'update'])->name('cms.spotlight.update');\n Route::delete('/spotlight/{item}', [SpotlightItemController::class, 'destroy'])->name('cms.spotlight.destroy');\n \n // Reorder FAQ (items & categories)\n Route::post('/faqs/{id}/move', [CmsFaqController::class, 'move'])->name('cms.faqs.move');\n Route::post('/faqs/reorder', [CmsFaqController::class, 'reorder'])->name('cms.faqs.reorder');\n Route::post('/faqs/reorder-categories', [CmsFaqController::class, 'reorderCategories'])->name('cms.faqs.reorder_categories');\n\n // Broadcast Notifications (CMS)\n Route::get('/notifications/broadcast', [NotificationBroadcastController::class, 'create'])\n ->name('cmss.notifications.broadcast.create');\n Route::post('/notifications/broadcast', [NotificationBroadcastController::class, 'store'])\n ->name('cmss.notifications.broadcast.store');\n\n // Sponsored Stories (CMS)\n Route::get('/sponsored-stories', [SponsoredStoryController::class, 'index'])->name('sponsored_stories.index');\n Route::get('/sponsored-stories/create', [SponsoredStoryController::class, 'create'])->name('sponsored_stories.create');\n Route::post('/sponsored-stories', [SponsoredStoryController::class, 'store'])->name('sponsored_stories.store');\n Route::get('/sponsored-stories/{id}/edit', [SponsoredStoryController::class, 'edit'])->name('sponsored_stories.edit');\n Route::put('/sponsored-stories/{id}', [SponsoredStoryController::class, 'update'])->name('sponsored_stories.update');\n Route::delete('/sponsored-stories/{id}', [SponsoredStoryController::class, 'destroy'])->name('sponsored_stories.destroy');\n\n Route::post('/sponsored-stories/{id}/approve', [SponsoredStoryController::class, 'approve'])->name('sponsored_stories.approve');\n Route::post('/sponsored-stories/{id}/pause', [SponsoredStoryController::class, 'pause'])->name('sponsored_stories.pause');\n Route::post('/sponsored-stories/{id}/resume', [SponsoredStoryController::class, 'resume'])->name('sponsored_stories.resume');\n Route::post('/sponsored-stories/{id}/end', [SponsoredStoryController::class, 'end'])->name('sponsored_stories.end');\n\n // Header Top Links (CMS)\n Route::get('/top-links', [HeaderTopLinkController::class, 'index'])->name('cms.toplinks.index');\n Route::get('/top-links/create', [HeaderTopLinkController::class, 'create'])->name('cms.toplinks.create');\n Route::post('/top-links', [HeaderTopLinkController::class, 'store'])->name('cms.toplinks.store');\n Route::get('/top-links/{id}/edit', [HeaderTopLinkController::class, 'edit'])->name('cms.toplinks.edit');\n Route::post('/top-links/{id}', [HeaderTopLinkController::class, 'update'])->name('cms.toplinks.update');\n Route::post('/top-links/{id}/delete', [HeaderTopLinkController::class, 'destroy'])->name('cms.toplinks.destroy');\n Route::post('/top-links/{id}/toggle', [HeaderTopLinkController::class, 'toggle'])->name('cms.toplinks.toggle');\n \n//HOME PROMOS\nRoute::resource('home-promos', \App\Http\Controllers\Cms\HomePromoController::class)\n ->except(['show']);\n\n\n // CATEGORIES (CMS)\n Route::resource('categories', CmsCategoryController::class)\n ->except(['show'])\n ->names('cms.categories');\n\n Route::post('categories/reorder', [CmsCategoryController::class, 'reorder'])->name('cms.categories.reorder');\n});\n\n\n\n\n// Legacy CMS dashboard pa prefix (e lë si në kodin ekzistues)\nRoute::get('/dashboard', [DashboardController::class, 'dashboard'])->name('cms.dashboard');\n\n\n// ======================================================\n// BANNER IMPRESSIONS / CLICKS (THROTTLED)\n// ======================================================\n\nRoute::middleware('throttle:120,1')->group(function () {\n Route::get('/banner-view/{id}', function ($id) {\n AdBanner::where('id', $id)->increment('views');\n return response()->noContent();\n })->whereNumber('id');\n\n Route::get('/banner-click/{id}', function ($id) {\n AdBanner::where('id', $id)->increment('clicks');\n return response()->noContent();\n })->whereNumber('id');\n});\n\n\n/*\n|--------------------------------------------------------------------------\n| Payment integrations\n|--------------------------------------------------------------------------\n*/\nRoute::prefix('checkout/payments/teb')->group(function () {\n Route::get('/{order}/redirect', [\App\Http\Controllers\Shop\TebPaymentController::class, 'redirect'])\n ->whereNumber('order')\n ->name('shop.payments.teb.redirect');\n\n Route::match(['get', 'post'], '/success', [\App\Http\Controllers\Shop\TebPaymentController::class, 'success'])\n ->name('shop.payments.teb.success');\n\n Route::match(['get', 'post'], '/fail', [\App\Http\Controllers\Shop\TebPaymentController::class, 'fail'])\n ->name('shop.payments.teb.fail');\n\n Route::match(['get', 'post'], '/notify', [\App\Http\Controllers\Shop\TebPaymentController::class, 'notify'])\n ->name('shop.payments.teb.notify');\n});\n\n\n// ======================================================\n// LEGACY LISTING ROUTES / SEO URLS\n// ======================================================\n\n// Legacy: /listing/{id}\nRoute::get('/listing/{id}', [ListingController::class, 'show'])\n ->whereNumber('id')\n ->name('listing.show');\n\n// Pretty: /{category}/{subcategory}/{slug} (ECOMMERCE)\nRoute::get('/{category}/{subcategory}/{slug}', [ProductController::class, 'showPretty'])\n ->where(['category' => '.*', 'subcategory' => '.*', 'slug' => '.+'])\n ->name('listing.pretty');\n\n// Short product slug (root): /p/{slug}\nRoute::get('/p/{slug}', [ProductController::class, 'showBySlug'])->name('product.show');\n\n// SEO fallback me 3 segmente për listings ekzistuese\nRoute::get('{parent}/{child}/{slug}', [ListingController::class, 'show'])\n ->where([\n 'parent' => '^(?!email$|auth$|cmss$|user$|api$|sitemap\.xml$|made-in-kosova$|faq$|telefon$).+',\n 'child' => '^(?!verify$|verification-notification$).+',\n ])\n ->name('listing.show.seo');\n\n// LANDING PAGES PUBLIC\nRoute::get('/{slug}', [\App\Http\Controllers\Shop\LandingPageController::class, 'show'])\n ->where('slug', '^(?!email$|auth$|login$|register$|password$|cmss$|user$|dashboard$|sitemap\.xml$|faq$|two-factor-challenge$|telefon$|shop$|cart$|checkout$|brand$|category$|search$|wishlist$|account$|terms$|privacy$|about-us$|p$).+')\n ->name('landing-pages.public.show');\n\n// Profili publik (slug në root) – kujdes me reserved words\nRoute::get('/{user:slug}', [ProfileController::class, 'publicProfile'])\n ->where('user', '^(?!email$|auth$|login$|register$|password$|cmss$|user$|dashboard$|sitemap\.xml$|faq$|two-factor-challenge$|telefon$).+')\n ->name('profile.public');\n\n// Redirect legacy: /user/{id}/{slug?} -> profile.public\nRoute::get('/user/{id}/{slug?}', function ($id) {\n $u = \App\Models\User::findOrFail($id);\n return redirect()->route('profile.public', $u->slug, 301);\n});\n\n\n\n\n// ======================================================\n// FALLBACK 404\n// ======================================================\n\n\n/*\n|--------------------------------------------------------------------------\n| Sportas legacy Navision webhooks\n|--------------------------------------------------------------------------\n| Këto janë URL-të që i ka përdorur Sportas i vjetër.\n| Kur kidwear-test vendoset në sportas.shop, Navision vazhdon pa ndryshim.\n*/\nRoute::post('/saveProduct', [\App\Http\Controllers\Api\Integrations\NavisionWebhookController::class, 'saveProduct'])\n ->name('legacy.navision.saveProduct');\n\nRoute::post('/saveProducts', [\App\Http\Controllers\Api\Integrations\NavisionWebhookController::class, 'saveProducts'])\n ->name('legacy.navision.saveProducts');\n\nRoute::post('/updateQuantity', [\App\Http\Controllers\Api\Integrations\NavisionWebhookController::class, 'updateQuantity'])\n ->name('legacy.navision.updateQuantity');\n\nRoute::post('/updatePrice', [\App\Http\Controllers\Api\Integrations\NavisionWebhookController::class, 'updatePrice'])\n ->name('legacy.navision.updatePrice');\n\nRoute::post('/updateOutlet', [\App\Http\Controllers\Api\Integrations\NavisionWebhookController::class, 'updateOutlet'])\n ->name('legacy.navision.updateOutlet');\n\n\n// Sportas legacy TEB callback routes\nRoute::match(['get', 'post'], '/checkout/successpayment', [\App\Http\Controllers\Shop\TebPaymentController::class, 'success'])\n ->name('shop.payments.teb.legacy_success');\n\nRoute::match(['get', 'post'], '/checkout/failpayment', [\App\Http\Controllers\Shop\TebPaymentController::class, 'fail'])\n ->name('shop.payments.teb.legacy_fail');\n\nRoute::match(['get', 'post'], '/checkout/notifypayment', [\App\Http\Controllers\Shop\TebPaymentController::class, 'notify'])\n ->name('shop.payments.teb.legacy_notify');\n\nRoute::fallback(function () {\n return response()->view('errors.404', [], 404);\n});\n\n// Sportas external stock compatibility endpoints. Do not rename these paths.\n\n\n // Sportas external stock compatibility endpoints. Do not rename these paths. Route::match(['GET', 'POST'], '/send_to_stock.php', \App\Http\Controllers\ExternalStock\SendToStockController::class) ->name('external-stock.send-to-stock'); Route::match(['GET', 'POST'], '/webUpdate.php', \App\Http\Controllers\ExternalStock\WebUpdateController::class) ->name('external-stock.web-update'); \n