<?php

use App\Http\Controllers\Frontend\HomeController;
use App\Http\Controllers\Frontend\ProductController;
use App\Http\Controllers\Frontend\CartController;
use App\Http\Controllers\Frontend\CheckoutController;
use App\Http\Controllers\Frontend\OrderController;
use App\Http\Controllers\Frontend\WishlistController;
use App\Http\Controllers\Frontend\UserPanelController;
use App\Http\Controllers\Frontend\BlogController;
use App\Http\Controllers\Auth\SocialiteController;
use Illuminate\Support\Facades\Route;

Route::get('/', [HomeController::class, 'index'])->name('home');
Route::get('/products', [ProductController::class, 'index'])->name('products.index');
Route::get('/products/{slug}', [ProductController::class, 'show'])->name('products.show');

Route::prefix('cart')->name('cart.')->group(function () {
    Route::get('/', [CartController::class, 'index'])->name('index');
    Route::post('/add', [CartController::class, 'add'])->name('add');
    Route::put('/update/{id}', [CartController::class, 'update'])->name('update');
    Route::delete('/remove/{id}', [CartController::class, 'remove'])->name('remove');
    Route::post('/clear', [CartController::class, 'clear'])->name('clear');
});

Route::get('/checkout', [CheckoutController::class, 'index'])->name('checkout.index');
Route::post('/checkout', [CheckoutController::class, 'store'])->name('checkout.store');

Route::middleware('auth')->group(function () {
    Route::get('/orders', [OrderController::class, 'index'])->name('orders.index');
    Route::get('/orders/{order}', [OrderController::class, 'show'])->name('orders.show');
    Route::get('/orders/track/{order}', [OrderController::class, 'track'])->name('orders.track');
    Route::post('/orders/cancel/{order}', [OrderController::class, 'cancel'])->name('orders.cancel');
    Route::get('/wishlist', [WishlistController::class, 'index'])->name('wishlist.index');
    Route::post('/wishlist/add/{product}', [WishlistController::class, 'add'])->name('wishlist.add');
    Route::delete('/wishlist/remove/{product}', [WishlistController::class, 'remove'])->name('wishlist.remove');
    Route::prefix('user')->name('user.')->group(function () {
        Route::get('/dashboard', [UserPanelController::class, 'dashboard'])->name('dashboard');
        Route::get('/orders', [UserPanelController::class, 'orders'])->name('orders');
        Route::get('/wishlist', [UserPanelController::class, 'wishlist'])->name('wishlist');
        Route::get('/addresses', [UserPanelController::class, 'addresses'])->name('addresses');
        Route::get('/profile', [UserPanelController::class, 'profile'])->name('profile');
        Route::put('/profile', [UserPanelController::class, 'updateProfile'])->name('profile.update');
        Route::get('/change-password', [UserPanelController::class, 'changePassword'])->name('change-password');
        Route::put('/change-password', [UserPanelController::class, 'updatePassword'])->name('update-password');
    });
});

Route::get('/blog', [BlogController::class, 'index'])->name('blog.index');
Route::get('/blog/{slug}', [BlogController::class, 'show'])->name('blog.show');
Auth::routes(['verify' => true]);
Route::get('/auth/{provider}', [SocialiteController::class, 'redirect'])->name('social.login');
Route::get('/auth/{provider}/callback', [SocialiteController::class, 'callback']);
Route::post('/language/switch', [App\Http\Controllers\LanguageController::class, 'switch'])->name('language.switch');
Route::post('/currency/switch', [App\Http\Controllers\CurrencyController::class, 'switch'])->name('currency.switch');
Route::post('/theme/toggle', [App\Http\Controllers\ThemeController::class, 'toggle'])->name('theme.toggle');
Route::post('/return-request/{orderItem}', [App\Http\Controllers\Frontend\ReturnRequestController::class, 'store'])->name('return.request')->middleware('auth');
Route::prefix('admin')->middleware(['auth', 'admin'])->group(function () {
    Route::resource('products', App\Http\Controllers\Admin\ProductController::class);
});
Route::prefix('admin')->middleware(['auth', 'admin'])->group(function () {
    Route::get('/', function(){ return redirect()->route('admin.products.index'); })->name('admin.dashboard');
    Route::resource('products', App\Http\Controllers\Admin\ProductController::class);
    Route::get('/orders', [App\Http\Controllers\Admin\OrderController::class, 'index'])->name('admin.orders.index');
    Route::get('/customers', [App\Http\Controllers\Admin\CustomerController::class, 'index'])->name('admin.customers.index');
});