<?php

use App\Http\Controllers\AuthController;
use App\Http\Controllers\DashboardController;
use App\Http\Controllers\ManagementController;
use App\Http\Controllers\PosController;
use App\Http\Controllers\ShopContextController;
use Illuminate\Support\Facades\Route;

Route::middleware('guest')->group(function () {
    Route::get('/login', [AuthController::class, 'loginForm'])->name('login');
    Route::post('/login', [AuthController::class, 'login'])->name('login.store');
});

Route::middleware('auth')->group(function () {
    Route::post('/logout', [AuthController::class, 'logout'])->name('logout');
    Route::post('/shop-context', ShopContextController::class)->name('shop.context');

    Route::get('/', DashboardController::class)->middleware('permission:dashboard')->name('dashboard');
    Route::get('/pos', [PosController::class, 'index'])->middleware('permission:pos')->name('pos.index');
    Route::post('/pos/customers', [PosController::class, 'storeCustomer'])->middleware('permission:pos')->name('pos.customers.store');
    Route::post('/pos/sales', [PosController::class, 'store'])->middleware('permission:pos')->name('pos.sales.store');
    Route::get('/pos/sales/{sale}/receipt', [PosController::class, 'receipt'])->middleware('permission:pos')->name('pos.receipt');

    Route::get('/shops', [ManagementController::class, 'shops'])->middleware('permission:shops')->name('shops.index');
    Route::post('/shops', [ManagementController::class, 'storeShop'])->middleware('permission:shops')->name('shops.store');
    Route::get('/products', [ManagementController::class, 'products'])->middleware('permission:products')->name('products.index');
    Route::post('/products', [ManagementController::class, 'storeProduct'])->middleware('permission:products')->name('products.store');
    Route::get('/inventory', [ManagementController::class, 'inventory'])->middleware('permission:inventory')->name('inventory.index');
    Route::put('/inventory/{inventory}', [ManagementController::class, 'updateInventory'])->middleware('permission:inventory')->name('inventory.update');
    Route::get('/suppliers', [ManagementController::class, 'suppliers'])->middleware('permission:suppliers')->name('suppliers.index');
    Route::post('/suppliers', [ManagementController::class, 'storeSupplier'])->middleware('permission:suppliers')->name('suppliers.store');
    Route::get('/purchases', [ManagementController::class, 'purchases'])->middleware('permission:purchases')->name('purchases.index');
    Route::post('/purchases', [ManagementController::class, 'storePurchase'])->middleware('permission:purchases')->name('purchases.store');
    Route::get('/customers', [ManagementController::class, 'customers'])->middleware('permission:customers')->name('customers.index');
    Route::post('/customers', [ManagementController::class, 'storeCustomer'])->middleware('permission:customers')->name('customers.store');
    Route::get('/staff', [ManagementController::class, 'staff'])->middleware('permission:staff')->name('staff.index');
    Route::post('/staff', [ManagementController::class, 'storeStaff'])->middleware('permission:staff')->name('staff.store');
    Route::get('/expenses', [ManagementController::class, 'expenses'])->middleware('permission:expenses')->name('expenses.index');
    Route::post('/expenses', [ManagementController::class, 'storeExpense'])->middleware('permission:expenses')->name('expenses.store');
    Route::get('/transfers', [ManagementController::class, 'transfers'])->middleware('permission:transfers')->name('transfers.index');
    Route::post('/transfers', [ManagementController::class, 'storeTransfer'])->middleware('permission:transfers')->name('transfers.store');
    Route::post('/transfers/{transfer}/approve', [ManagementController::class, 'approveTransfer'])->middleware('permission:transfers')->name('transfers.approve');
    Route::get('/reports', [ManagementController::class, 'reports'])->middleware('permission:reports')->name('reports.index');
    Route::get('/settings', [ManagementController::class, 'settings'])->middleware('permission:settings')->name('settings.index');
    Route::post('/settings', [ManagementController::class, 'updateSettings'])->middleware('permission:settings')->name('settings.update');
});
