<?php

use App\Http\Controllers\Admin;
use App\Http\Controllers\Frontend;
use Illuminate\Support\Facades\Route;

/*
|--------------------------------------------------------------------------
| Frontend Routes
|--------------------------------------------------------------------------
*/

Route::get('/', [Frontend\HomeController::class, 'index'])->name('home');

// Shop
Route::get('/shop', [Frontend\ProductController::class, 'index'])->name('shop');
Route::get('/product/{slug}', [Frontend\ProductController::class, 'show'])->name('product.show');

// Cart
Route::get('/cart', [Frontend\CartController::class, 'index'])->name('cart');
Route::post('/cart/add', [Frontend\CartController::class, 'add'])->name('cart.add');
Route::patch('/cart/{cart}', [Frontend\CartController::class, 'update'])->name('cart.update');
Route::delete('/cart/{cart}', [Frontend\CartController::class, 'remove'])->name('cart.remove');

// Checkout
Route::get('/checkout', [Frontend\CheckoutController::class, 'index'])->name('checkout');
Route::post('/checkout', [Frontend\CheckoutController::class, 'store'])->name('checkout.store');
Route::post('/buy-now', [Frontend\CheckoutController::class, 'buyNow'])->name('buy.now');
Route::get('/thank-you/{orderNumber}', [Frontend\CheckoutController::class, 'success'])->name('order.success');

// Tracking
Route::get('/tracking', [Frontend\CheckoutController::class, 'track'])->name('tracking');
Route::post('/tracking', [Frontend\CheckoutController::class, 'track'])->name('tracking.search');

// Blog
Route::get('/blog', [Frontend\BlogController::class, 'index'])->name('blog.index');
Route::get('/blog/{slug}', [Frontend\BlogController::class, 'show'])->name('blog.show');

// Static pages
Route::view('/contact', 'frontend.contact')->name('contact');

/*
|--------------------------------------------------------------------------
| Admin Routes
|--------------------------------------------------------------------------
*/

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

    // Auth (no middleware)
    Route::get('/login', [Admin\AuthController::class, 'showLogin'])->name('login');
    Route::post('/login', [Admin\AuthController::class, 'login'])->name('login.post');

    // Authenticated admin routes
    Route::middleware('admin')->group(function () {

        Route::post('/logout', [Admin\AuthController::class, 'logout'])->name('logout');

        // Dashboard
        Route::get('/', [Admin\DashboardController::class, 'index'])->name('dashboard');
        Route::get('/dashboard', [Admin\DashboardController::class, 'index']);

        // Categories
        Route::resource('categories', Admin\CategoryController::class);

        // Tags
        Route::get('/tags', [Admin\TagController::class, 'index'])->name('tags.index');
        Route::post('/tags', [Admin\TagController::class, 'store'])->name('tags.store');
        Route::put('/tags/{tag}', [Admin\TagController::class, 'update'])->name('tags.update');
        Route::delete('/tags/{tag}', [Admin\TagController::class, 'destroy'])->name('tags.destroy');

        // Products
        Route::resource('products', Admin\ProductController::class);
        Route::delete('/product-images/{image}', [Admin\ProductController::class, 'deleteImage'])->name('products.images.delete');
        Route::delete('/product-variations/{variation}', [Admin\ProductController::class, 'deleteVariation'])->name('products.variations.delete');

        // Orders
        Route::get('/orders', [Admin\OrderController::class, 'index'])->name('orders.index');
        Route::get('/orders/{order}', [Admin\OrderController::class, 'show'])->name('orders.show');
        Route::patch('/orders/{order}/status', [Admin\OrderController::class, 'updateStatus'])->name('orders.status');
        Route::post('/orders/{order}/tracking', [Admin\OrderController::class, 'addTracking'])->name('orders.tracking');
        Route::delete('/orders/{order}', [Admin\OrderController::class, 'destroy'])->name('orders.destroy');

        // Blog
        Route::resource('blog', Admin\BlogController::class);

        // Sliders
        Route::get('/sliders', [Admin\SliderController::class, 'index'])->name('sliders.index');
        Route::post('/sliders', [Admin\SliderController::class, 'store'])->name('sliders.store');
        Route::patch('/sliders/{slider}', [Admin\SliderController::class, 'update'])->name('sliders.update');
        Route::delete('/sliders/{slider}', [Admin\SliderController::class, 'destroy'])->name('sliders.destroy');

        // Settings
        Route::get('/settings', [Admin\SettingsController::class, 'index'])->name('settings.index');
        Route::put('/settings', [Admin\SettingsController::class, 'update'])->name('settings.update');

        // License
        Route::get('/license', [Admin\LicenseController::class, 'index'])->name('license.index');
        Route::post('/license/refresh', [Admin\LicenseController::class, 'refresh'])->name('license.refresh');

        // Menu Management
        Route::get('/menus', [Admin\MenuController::class, 'index'])->name('menus.index');
        Route::post('/menus', [Admin\MenuController::class, 'store'])->name('menus.store');
        Route::put('/menus', [Admin\MenuController::class, 'update'])->name('menus.update');
        Route::delete('/menus/{menuItem}', [Admin\MenuController::class, 'destroy'])->name('menus.destroy');
    });
});
