<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Api\Admin\AuthController;
use App\Http\Controllers\Api\Admin\DashboardController;
use App\Http\Controllers\Api\Admin\CategoryController;
use App\Http\Controllers\Api\Admin\SubCategoryController;
use App\Http\Controllers\Api\Admin\ProductController;
use App\Http\Controllers\Api\Admin\ProductPackageTypeController;
use App\Http\Controllers\Api\Admin\ProductSizeController;
use App\Http\Controllers\Api\Admin\ProductUnitController;
use App\Http\Controllers\Api\Admin\BannerController;
use App\Http\Controllers\Api\Admin\BlogController;
use App\Http\Controllers\Api\Admin\FaqController;
use App\Http\Controllers\Api\Admin\PolicyController;

use App\Http\Controllers\Api\Admin\UserController;
use App\Http\Controllers\Api\Admin\SupplierController;
use App\Http\Controllers\Api\Admin\InventoryController;

use App\Http\Controllers\Api\Admin\OrderController;
use App\Http\Controllers\Api\Admin\ReportController;
use App\Http\Controllers\Api\Customer\CustomerAuthController;
use App\Http\Controllers\Api\Customer\CustomerAddressController;
use App\Http\Controllers\Api\Customer\WishlistController;

use App\Http\Controllers\Api\Customer\CartController;
use App\Http\Controllers\Api\Customer\CheckoutController;
use App\Http\Controllers\Api\Customer\CustomerOrderController;
use App\Http\Controllers\Api\Customer\CustomerProductController;
use App\Http\Controllers\Api\Customer\ReviewController;

use App\Http\Controllers\Api\Customer\ReturnRequestController as CustomerReturnRequestController;
use App\Http\Controllers\Api\Admin\ReturnRequestController as AdminReturnRequestController;
use App\Http\Controllers\Api\Customer\CancelRequestController as CustomerCancelRequestController;
use App\Http\Controllers\Api\Admin\CancelRequestController as AdminCancelRequestController;
use App\Http\Controllers\Api\Customer\ReplaceRequestController as CustomerReplaceRequestController;
use App\Http\Controllers\Api\Admin\ReplaceRequestController as AdminReplaceRequestController;

use App\Http\Controllers\Api\Customer\PaymentController as CustomerPaymentController;
use App\Http\Controllers\Api\Customer\PaymentMethodController;
use App\Http\Controllers\Api\Customer\WalletController;
use App\Http\Controllers\Api\Admin\PaymentController as AdminPaymentController;
use App\Http\Controllers\Api\Webhook\PaymentWebhookController;

use App\Http\Controllers\Api\Admin\CustomerManagementController;
use App\Http\Controllers\Api\Admin\PurchaseOrderController;
use App\Http\Controllers\Api\Admin\ProductImageController;
use App\Http\Controllers\Api\Customer\CustomerOtpController;
use App\Http\Controllers\Api\Customer\PublicContentController;

use App\Http\Controllers\Api\Admin\ActivityLogController;
use App\Http\Controllers\Api\Admin\ReportExportController;

use App\Http\Controllers\Api\Admin\DeliveryOrderController;
use App\Http\Controllers\Api\Delivery\DeliveryStaffOrderController;
use App\Http\Controllers\Api\Admin\AnalyticsController;
use App\Http\Controllers\Api\Admin\WebsiteSettingController;
use App\Http\Controllers\Api\Admin\CouponController;
use App\Http\Controllers\Api\Admin\AdminNotificationController;


// Route::prefix('admin')->group(function () {
//     Route::post('/register', [AuthController::class, 'register']);
//     Route::post('/login', [AuthController::class, 'login']);

//     Route::middleware('auth:sanctum')->group(function () {
//         Route::post('/logout', [AuthController::class, 'logout']);
//         Route::get('/profile', [AuthController::class, 'profile']);
//         Route::post('/change-password', [AuthController::class, 'changePassword']);

//         Route::middleware('role:Super Admin,Manager')->group(function () {
//             Route::get('/dashboard', [DashboardController::class, 'index']);
//             Route::apiResource('/categories', CategoryController::class);
//             Route::apiResource('/sub-categories', SubCategoryController::class);
//             Route::apiResource('/products', ProductController::class);
//             Route::apiResource('banners', BannerController::class);
//             Route::apiResource('blogs', BlogController::class);
//             Route::apiResource('faqs', FaqController::class);
//             Route::apiResource('policies', PolicyController::class);
//         });

        
//     });

    
// });


// Route::prefix('admin')->group(function () {

//     Route::post('/register', [AuthController::class, 'register']);
//     Route::post('/login', [AuthController::class, 'login']);

//     Route::middleware('auth:sanctum')->group(function () {

//         Route::post('/logout', [AuthController::class, 'logout']);
//         Route::get('/profile', [AuthController::class, 'profile']);
//         Route::post('/change-password', [AuthController::class, 'changePassword']);

//         Route::middleware('role:Super Admin,Manager')->group(function () {
//             Route::get('/dashboard', [DashboardController::class, 'index']);
//             Route::apiResource('/categories', CategoryController::class);
//             Route::apiResource('/sub-categories', SubCategoryController::class);
//             Route::apiResource('/products', ProductController::class);
//             Route::apiResource('/banners', BannerController::class);
//             Route::apiResource('/blogs', BlogController::class);
//             Route::apiResource('/faqs', FaqController::class);
//             Route::apiResource('/policies', PolicyController::class);
//         });

//         Route::middleware('role:Super Admin,Admin')->group(function () {
//             Route::get('/users', [UserController::class, 'index']);
//             Route::post('/users', [UserController::class, 'store']);
//             Route::get('/users/{id}', [UserController::class, 'show']);
//             Route::put('/users/{id}', [UserController::class, 'update']);
//             Route::delete('/users/{id}', [UserController::class, 'destroy']);
//             Route::patch('/users/{id}/status', [UserController::class, 'changeStatus']);
//         });
//     });
// });


Route::prefix('admin')->group(function () {

    Route::post('/login', [AuthController::class, 'login']);
    // Route::post('/webhooks/payments/{gateway}', [PaymentWebhookController::class, 'handle']);

    Route::middleware('auth:sanctum')->group(function () {

        Route::post('/register', [AuthController::class, 'register'])->middleware('role:Super Admin,Admin');
        Route::post('/logout', [AuthController::class, 'logout']);
        Route::get('/profile', [AuthController::class, 'profile']);
        Route::post('/profile', [AuthController::class, 'updateProfile']);
        Route::put('/profile', [AuthController::class, 'updateProfile']);
        Route::post('/change-password', [AuthController::class, 'changePassword']);

        Route::middleware('role:Super Admin,Admin,Manager')->group(function () {
            Route::get('/users', [UserController::class, 'index']);
            Route::get('/users/roles', [UserController::class, 'roles']);
            Route::get('/users/{id}', [UserController::class, 'show']);
        });

        Route::middleware('role:Super Admin,Admin')->group(function () {
            Route::post('/users', [UserController::class, 'store']);
            Route::put('/users/{id}', [UserController::class, 'update']);
            Route::delete('/users/{id}', [UserController::class, 'destroy']);
            Route::patch('/users/{id}/status', [UserController::class, 'changeStatus']);
            Route::apiResource('/coupons', CouponController::class);
            Route::get('/website-settings', [WebsiteSettingController::class, 'show']);
            Route::post('/website-settings', [WebsiteSettingController::class, 'update']);
        });

        Route::middleware('role:Super Admin,Admin,Manager')->group(function () {
            Route::get('/dashboard', [DashboardController::class, 'index']);
            Route::apiResource('/categories', CategoryController::class);
            Route::post('/categories/{id}', [CategoryController::class, 'update']);
            Route::apiResource('/sub-categories', SubCategoryController::class);
            Route::post('/sub-categories/{id}', [SubCategoryController::class, 'update']);
            Route::apiResource('/products', ProductController::class);
            Route::post('/products/{id}', [ProductController::class, 'update']);
            Route::apiResource('/product-units', ProductUnitController::class);
            Route::apiResource('/product-sizes', ProductSizeController::class);
            Route::apiResource('/product-package-types', ProductPackageTypeController::class);
            Route::apiResource('/banners', BannerController::class);
            Route::post('/banners/{id}', [BannerController::class, 'update']);
            Route::apiResource('/blogs', BlogController::class);
            Route::post('/blogs/{id}', [BlogController::class, 'update']);
            Route::apiResource('/faqs', FaqController::class);
            Route::apiResource('/policies', PolicyController::class);
            Route::apiResource('/suppliers', SupplierController::class);
            Route::patch('/suppliers/{id}/status', [SupplierController::class, 'changeStatus']);
        });

        Route::middleware('role:Super Admin,Admin,Manager')->group(function () {
            Route::get('/inventory/summary', [InventoryController::class, 'summary']);
            Route::get('/inventory/low-stock', [InventoryController::class, 'lowStock']);
            Route::get('/inventory/expiry-products', [InventoryController::class, 'expiryProducts']);
            Route::get('/inventory/fast-moving', [InventoryController::class, 'fastMoving']);
            Route::get('/inventory/slow-moving', [InventoryController::class, 'slowMoving']);
            Route::patch('/products/{id}/stock', [InventoryController::class, 'updateStock']);
        });

        Route::middleware('role:Super Admin,Admin,Manager')->group(function () {
            Route::get('/orders', [OrderController::class, 'index']);
            Route::post('/orders', [OrderController::class, 'store']);
            Route::get('/orders/{id}', [OrderController::class, 'show']);
            Route::get('/orders/{id}/tracking', [OrderController::class, 'tracking']);
            Route::get('/orders/{id}/invoice', [OrderController::class, 'invoice']);
            Route::get('/orders/{id}/refund', [OrderController::class, 'refund']);
            Route::patch('/orders/{id}/status', [OrderController::class, 'updateStatus']);
            Route::patch('/orders/{id}/payment-status', [OrderController::class, 'updatePaymentStatus']);
            Route::delete('/orders/{id}', [OrderController::class, 'destroy']);
        });

        Route::middleware('role:Super Admin,Admin,Manager')->group(function () {
            Route::get('/reports/sales', [ReportController::class, 'sales']);
            Route::get('/reports/revenue', [ReportController::class, 'revenue']);
            Route::get('/reports/customers', [ReportController::class, 'customers']);
            Route::get('/reports/products', [ReportController::class, 'products']);
            Route::get('/reports/purchase', [ReportController::class, 'purchase']);
            Route::get('/reports/payments', [ReportController::class, 'payments']);
            Route::get('/reports/inventory', [ReportController::class, 'inventory']);

            
            Route::get('/return-requests', [AdminReturnRequestController::class, 'index']);
            Route::get('/return-requests/{id}', [AdminReturnRequestController::class, 'show']);
            Route::patch('/return-requests/{id}/status', [AdminReturnRequestController::class, 'updateStatus']);

            Route::get('/cancel-requests', [AdminCancelRequestController::class, 'index']);
            Route::get('/cancel-requests/{id}', [AdminCancelRequestController::class, 'show']);
            Route::patch('/cancel-requests/{id}/status', [AdminCancelRequestController::class, 'updateStatus']);

            Route::get('/replace-requests', [AdminReplaceRequestController::class, 'index']);
            Route::get('/replace-requests/{id}', [AdminReplaceRequestController::class, 'show']);
            Route::patch('/replace-requests/{id}/status', [AdminReplaceRequestController::class, 'updateStatus']);

            Route::get('/reports/sales/pdf', [ReportExportController::class, 'salesPdf']);
            Route::get('/reports/customers/pdf', [ReportExportController::class, 'customersPdf']);
            Route::get('/reports/inventory/pdf', [ReportExportController::class, 'inventoryPdf']);

            Route::get('/reports/sales/excel', [ReportExportController::class, 'sales']);
            Route::get('/reports/customers/excel', [ReportExportController::class, 'customers']);
            Route::get('/reports/inventory/excel', [ReportExportController::class, 'inventory']);


            Route::get('/payments', [AdminPaymentController::class, 'index']);
            Route::get('/payments/{id}', [AdminPaymentController::class, 'show']);

            });


        Route::middleware('role:Super Admin,Admin,Manager')->group(function () {
            Route::get('/customers', [CustomerManagementController::class, 'index']);
            Route::get('/customers/{id}', [CustomerManagementController::class, 'show']);
            Route::put('/customers/{id}', [CustomerManagementController::class, 'update']);
            Route::patch('/customers/{id}/status', [CustomerManagementController::class, 'updateStatus']);
            Route::delete('/customers/{id}', [CustomerManagementController::class, 'destroy']);
            Route::get('/customers/{id}/orders', [CustomerManagementController::class, 'orders']);
            Route::get('/customers/{id}/activity', [CustomerManagementController::class, 'activity']);


            Route::get('/purchase-orders', [PurchaseOrderController::class, 'index']);
            Route::get('/purchase-orders/{id}', [PurchaseOrderController::class, 'show']);


            Route::get('/products/{id}/images', [ProductImageController::class, 'index']);
            Route::post('/products/{id}/images', [ProductImageController::class, 'store']);
            Route::delete('/product-images/{id}', [ProductImageController::class, 'destroy']);
            Route::patch('/product-images/{id}/thumbnail', [ProductImageController::class, 'makeThumbnail']);


            Route::get('/activity-logs', [ActivityLogController::class, 'index']);
            Route::get('/activity-logs/{id}', [ActivityLogController::class, 'show']);
            Route::get('/customers/{id}/activity-logs', [ActivityLogController::class, 'customerLogs']);

            Route::get('/reports/sales/export', [ReportExportController::class, 'sales']);
            Route::get('/reports/customers/export', [ReportExportController::class, 'customers']);
            Route::get('/reports/inventory/export', [ReportExportController::class, 'inventory']);


            Route::get('/delivery-staff', [DeliveryOrderController::class, 'deliveryStaffList']);
            Route::patch('/orders/{id}/assign-delivery', [DeliveryOrderController::class, 'assign']);
            Route::get('/delivery-orders', [DeliveryOrderController::class, 'assignedOrders']);

            Route::get('/analytics/overview', [AnalyticsController::class, 'overview']);
            Route::get('/analytics/monthly-sales', [AnalyticsController::class, 'monthlySales']);
            Route::get('/analytics/top-products', [AnalyticsController::class, 'topProducts']);
            Route::get('/analytics/customer-growth', [AnalyticsController::class, 'customerGrowth']);
            Route::get('/analytics/recent-orders', [AnalyticsController::class, 'recentOrders']);
            Route::get('/analytics/low-stock-products', [AnalyticsController::class, 'lowStockProducts']);

            Route::get('/notifications', [AdminNotificationController::class, 'index']);
            Route::get('/notifications/count', [AdminNotificationController::class, 'count']);
            Route::post('/notifications/read', [AdminNotificationController::class, 'markRead']);
            Route::post('/notifications/read-all', [AdminNotificationController::class, 'markAllRead']);
            Route::delete('/notifications/{notificationKey}', [AdminNotificationController::class, 'destroy']);
        }); 

        Route::middleware('role:Super Admin,Admin')->group(function () {
            Route::post('/purchase-orders', [PurchaseOrderController::class, 'store']);
            Route::put('/purchase-orders/{id}', [PurchaseOrderController::class, 'update']);
            Route::patch('/purchase-orders/{id}/status', [PurchaseOrderController::class, 'updateStatus']);
            Route::delete('/purchase-orders/{id}', [PurchaseOrderController::class, 'destroy']);
        });
    });
});

Route::post('/webhooks/payments/{gateway}', [PaymentWebhookController::class, 'handle']);
Route::post('/contact', [\App\Http\Controllers\Api\ContactController::class, 'store']);

Route::prefix('delivery')->middleware(['auth:sanctum', 'role:Delivery Staff'])->group(function () {
    Route::get('/orders', [DeliveryStaffOrderController::class, 'myOrders']);

    Route::get('/orders/{id}', [DeliveryStaffOrderController::class, 'show']);
    Route::patch('/orders/{id}/status', [DeliveryStaffOrderController::class, 'updateStatus']);
});


Route::prefix('customer')->group(function () {

    Route::get('/banners', [PublicContentController::class, 'banners']);
    Route::get('/faqs', [PublicContentController::class, 'faqs']);
    Route::get('/policies', [PublicContentController::class, 'policies']);
    Route::get('/policies/{slug}', [PublicContentController::class, 'policy']);
    Route::get('/blogs', [PublicContentController::class, 'blogs']);
    Route::get('/blogs/{slug}', [PublicContentController::class, 'blog']);
    Route::get('/coupons', [PublicContentController::class, 'coupons']);


    // Route::post('/webhooks/payments/{gateway}', [PaymentWebhookController::class, 'handle']);

    Route::get('/categories', [CustomerProductController::class, 'categories']);
    Route::get('/products', [CustomerProductController::class, 'products']);
    Route::get('/products/search/suggestions', [CustomerProductController::class, 'searchSuggestions']);
    Route::get('/products/home-sections', [CustomerProductController::class, 'homeSections']);
    Route::get('/home-sections', [CustomerProductController::class, 'homeSections']);

    Route::get('/products/new-arrivals', [CustomerProductController::class, 'newArrivals']);
    Route::get('/products/trending', [CustomerProductController::class, 'trending']);
    Route::get('/products/seasonal', [CustomerProductController::class, 'seasonal']);
    Route::get('/products/featured', [CustomerProductController::class, 'featured']);

    Route::get('/products/{slug}', [CustomerProductController::class, 'productDetails']);
    Route::get('/categories/{slug}/products', [CustomerProductController::class, 'productsByCategory']);

    Route::get('/products/{id}/reviews', [ReviewController::class, 'productReviews']);

    Route::post('/register', [CustomerAuthController::class, 'register']);
    // Route::post('/login', [CustomerAuthController::class, 'login']);
    Route::post('/login', [CustomerAuthController::class, 'login'])->middleware('throttle:5,1');

    // Route::post('/send-otp', [CustomerOtpController::class, 'sendOtp']);
    Route::post('/send-otp', [CustomerOtpController::class, 'sendOtp'])->middleware('throttle:3,1');
    Route::post('/verify-otp', [CustomerOtpController::class, 'verifyOtp']);

    Route::middleware('auth:customer')->group(function () {
        Route::get('/profile', [CustomerAuthController::class, 'profile']);
        Route::put('/profile', [CustomerAuthController::class, 'updateProfile']);
        Route::post('/change-password', [CustomerAuthController::class, 'changePassword']);
        Route::post('/logout', [CustomerAuthController::class, 'logout']);
        Route::delete('/delete-account', [CustomerAuthController::class, 'deleteAccount']);

        Route::get('/addresses', [CustomerAddressController::class, 'index']);
        Route::post('/addresses', [CustomerAddressController::class, 'store']);
        Route::get('/addresses/{id}', [CustomerAddressController::class, 'show']);
        Route::put('/addresses/{id}', [CustomerAddressController::class, 'update']);
        Route::delete('/addresses/{id}', [CustomerAddressController::class, 'destroy']);
        Route::patch('/addresses/{id}/default', [CustomerAddressController::class, 'makeDefault']);

        Route::get('/wishlist', [WishlistController::class, 'index']);
        Route::post('/wishlist', [WishlistController::class, 'store']);
        Route::delete('/wishlist/{id}', [WishlistController::class, 'destroy']);
        Route::post('/wishlist/toggle', [WishlistController::class, 'toggle']);

        Route::get('/cart', [CartController::class, 'index']);
        Route::post('/cart/add', [CartController::class, 'add']);
        Route::put('/cart/items/{id}', [CartController::class, 'updateQuantity']);
        Route::delete('/cart/items/{id}', [CartController::class, 'remove']);
        Route::delete('/cart/clear', [CartController::class, 'clear']);
        Route::post('/cart/validate-coupon', [CartController::class, 'validateCoupon']);

        Route::post('/checkout', [CheckoutController::class, 'checkout']);

        Route::get('/orders', [CustomerOrderController::class, 'index']);
        Route::get('/orders/{id}', [CustomerOrderController::class, 'show']);
        Route::get('/orders/{id}/track', [CustomerOrderController::class, 'track']);
        Route::post('/orders/{id}/cancel-request', [CustomerCancelRequestController::class, 'store']);

        Route::get('/wallet', [WalletController::class, 'show']);
        Route::get('/wallet/transactions', [WalletController::class, 'transactions']);
        Route::post('/wallet/add-money', [WalletController::class, 'addMoney']);

        Route::get('/payment-methods', [PaymentMethodController::class, 'index']);
        Route::post('/payment-methods', [PaymentMethodController::class, 'store']);
        Route::put('/payment-methods/{id}', [PaymentMethodController::class, 'update']);
        Route::delete('/payment-methods/{id}', [PaymentMethodController::class, 'destroy']);

        Route::post('/reviews', [ReviewController::class, 'store']);
        Route::get('/my-reviews', [ReviewController::class, 'myReviews']);
        Route::put('/reviews/{id}', [ReviewController::class, 'update']);
        Route::delete('/reviews/{id}', [ReviewController::class, 'destroy']);

        Route::get('/return-requests', [CustomerReturnRequestController::class, 'index']);
        Route::post('/return-requests', [CustomerReturnRequestController::class, 'store']);
        Route::get('/return-requests/{id}', [CustomerReturnRequestController::class, 'show']);

        Route::get('/cancel-requests', [CustomerCancelRequestController::class, 'index']);
        Route::get('/cancel-requests/{id}', [CustomerCancelRequestController::class, 'show']);

        Route::get('/replace-requests', [CustomerReplaceRequestController::class, 'index']);
        Route::post('/replace-requests', [CustomerReplaceRequestController::class, 'store']);
        Route::get('/replace-requests/{id}', [CustomerReplaceRequestController::class, 'show']);

        Route::post('/payments/initiate', [CustomerPaymentController::class, 'initiate']);
        Route::post('/payments/verify', [CustomerPaymentController::class, 'verify']);
        Route::get('/payments/history', [CustomerPaymentController::class, 'history']);
    });
});

