<?php

use App\Http\Controllers\BusinessController;
use App\Http\Controllers\ECOM\CartController;
use App\Http\Controllers\ECOM\CatalogController;
use App\Http\Controllers\ECOM\CustomerAuthController;
use App\Http\Controllers\ECOM\OrdersController;
use App\Http\Controllers\ECOM\PaymentOrderController;
use App\Http\Controllers\ECOM\WishlistsController;
use App\Http\Controllers\OrderfulfillmentController;
use App\Http\Controllers\SellController;
use App\Http\Controllers\Staff\StaffAuthController;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;

Route::get('/user', function (Request $request) {
    return $request->user();
})->middleware('auth:sanctum');

Route::post('img',[BusinessController::class,'storeImage']);
Route::middleware(['throttle:throttle5pm'])->group(function () {
    Route::post('/customer/login', [CustomerAuthController::class, 'login']);
    Route::post('/customer/register', [CustomerAuthController::class,'register']);
    Route::post('/customer/forgot-password', [CustomerAuthController::class,'sendResetLinkEmail']);
    Route::post('/customer/set-password', [CustomerAuthController::class,'reset']);
    Route::post('/customer/contact-us', [CustomerAuthController::class,'contactus']);
    Route::post('/customer/subscribe', [CustomerAuthController::class,'subscribe']);
});
Route::middleware(['ecom.customer.validate'])->group(function () {
    Route::get('/customer/logout', [CustomerAuthController::class, 'logout']);
    Route::get('/customer/my-account', [CustomerAuthController::class, 'myAccount']);
    Route::get('/customer/my-orders', [OrdersController::class, 'mySaleOrders']);
    Route::get('/customer/my-invoices', [OrdersController::class, 'mySaleInvoices']);
    Route::get('/customer/my-order/{orderId}', [OrdersController::class, 'getOrderDetails']);
    Route::get('/customer/my-order-print/{orderId}', [OrdersController::class, 'printInvoice']);
    Route::post('/customer/update-address', [CustomerAuthController::class,'updateAddress']);

    //cart api 
    Route::get('/cart', [CartController::class, 'getCart']);
    Route::post('/cart', [CartController::class, 'bulkCartAddOrUpdate']);
    Route::delete('/cart', [CartController::class, 'deleteItem']);
    Route::delete('/cart/empty',[CartController::class,'emptyCartItems']);
    Route::post('/cart/reduce',[CartController::class,'reduceQty']);

    //address freeze
    Route::get('/checkout-address',[CartController::class,'getAddress']);
    Route::post('/checkout-address',[CartController::class,'address']);
    // Route::post('/checkout-update-address',[CartController::class,'updateAddress']);

    Route::resource('wishlist', WishlistsController::class);
});
Route::post('process-order',[PaymentOrderController::class,'processOrder']);

Route::get('/category-product/{slugs}',[CatalogController::class,'multiCategory']);
Route::get('/multi-category/{slugs}',[CatalogController::class,'multiCategory']);
Route::get('/shop',[CatalogController::class,'shopProducts']);
Route::get('/brand-product/{slug}',[CatalogController::class,'brandProducts']);
Route::get('/search',[CatalogController::class,'searchProducts']);
Route::get('/all-product',[CatalogController::class,'allProducts']);
Route::get('/brand-category-menu',[CatalogController::class,'sideMenu']);
Route::get('/brand-list',[CatalogController::class,'brandList']);
Route::get('/product/{slug}',[CatalogController::class,'singleProduct']);
Route::get('/product-list/{slug}',[CatalogController::class,'productList']);

Route::post('/test-email', [BusinessController::class, 'testEmailConfiguration']);
//temp route
// Route::get('sync-cat',[CatalogController::class,'syncCategories']);
Route::get('sync-user',[CatalogController::class,'syncUser']);
// Route::get('sync/{id}',[CatalogController::class,'storeProduct']);





//staff APIs
// For Staff Authentication Routes
Route::prefix('staff')->group(function () {
    //public
    Route::post('/login', [StaffAuthController::class, 'login']);
    //private
    Route::middleware(['user.access'])->group(function () {
        Route::get('/profile', [StaffAuthController::class, 'profile']);
        Route::get('/picking-orders', [OrderfulfillmentController::class, 'pickerManOrder']);
        Route::get('/picking-order/{id}', [SellController::class, 'manualPick']);
        Route::post('/picking-order/item', [SellController::class, 'manualPickStore']);        
        Route::post('/picking-order/revert', [OrderfulfillmentController::class, 'revert']);     
        Route::post('/picking-order/reset', [OrderfulfillmentController::class, 'reset']);   

        Route::post('/picking-order/status', [OrderfulfillmentController::class, 'updatePickingStatus']);
        Route::post('/picking-order/verify', [OrderfulfillmentController::class, 'verifyPicking']); // self start verify
        Route::post('/picking-order/start-time', [OrderfulfillmentController::class, 'storeStartTime']); // self start 
        Route::post('/picking-order/end-time', [OrderfulfillmentController::class, 'storeEndTime']); // self start

        Route::get('product-lookup',[CatalogController::class,'productLookup']);
        
        // lock logic
        Route::get('/session-lock/{modelType}/{modelId}', [OrderfulfillmentController::class, 'checkModalAccess']);
        Route::get('/session-ping/{modelType}/{modelId}', [OrderfulfillmentController::class, 'pingModal']);
        Route::post('/session-release/{modelType}/{modelId}', [OrderfulfillmentController::class, 'releaseModal']);
        // Route::post('/verifying-order/{id}', [OrderfulfillmentController::class, 'listOrderDetails']);
        // Route::get('/dashboard', [StaffAuthController::class, 'dashboard']);
        Route::get('/logout', [StaffAuthController::class, 'logout']);
    });
});


Route::fallback(function () {
    return response()->json([
        'message' => 'API endpoint not found.',
        'status' => false,
    ]);
});