<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\AuthController;
use App\Http\Controllers\DashboardController;
use App\Http\Controllers\LeadController;
use App\Http\Controllers\JobController;
use App\Http\Controllers\CalendarController;
use App\Http\Controllers\ContactController;
use App\Http\Controllers\MaterialController;
use App\Http\Controllers\QuoteController;
use App\Http\Controllers\ContractController;
use App\Http\Controllers\CheckMeasureController;
use App\Http\Controllers\ProcessingController;
use App\Http\Controllers\DeliveryController;
use App\Http\Controllers\InstallationController;
use App\Http\Controllers\CompletionController;
use App\Http\Controllers\ReportController;
use App\Http\Controllers\SettingsController;
use App\Http\Controllers\SearchController;
use App\Http\Controllers\ProductionOrderController;
use App\Http\Controllers\DocumentController;
use App\Http\Controllers\NotificationController;
use App\Http\Controllers\ProfileController;
use App\Http\Controllers\WorksOrderController;
use App\Http\Controllers\TimesheetController;
use App\Http\Controllers\StaffInvoiceController;
use App\Http\Controllers\StaffTaskTypeController;

Route::get('/login', [AuthController::class, 'showLogin'])->name('login');
Route::post('/login', [AuthController::class, 'login'])->name('login.post');
Route::post('/logout', [AuthController::class, 'logout'])->name('logout');

Route::get('/', fn() => redirect()->route('dashboard'));

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

    Route::get('/search', [SearchController::class, 'index'])->name('search');
    Route::get('/dashboard', [DashboardController::class, 'index'])->name('dashboard');
    Route::get('/profile', [ProfileController::class, 'index'])->name('profile.index');
    Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update');
    Route::post('/profile/password', [ProfileController::class, 'changePassword'])->name('profile.password');

    // ── Leads ─────────────────────────────────────────────────────────────────
    Route::get('/leads', [LeadController::class, 'index'])->name('leads.index');
    Route::middleware('role:office_admin,project_manager,sales_consultant')->group(function () {
        Route::get('/leads/create', [LeadController::class, 'create'])->name('leads.create');
        Route::post('/leads', [LeadController::class, 'store'])->name('leads.store');
    });
    Route::get('/leads/{lead}', [LeadController::class, 'show'])->name('leads.show');
    Route::middleware('role:office_admin,project_manager,sales_consultant')->group(function () {
        Route::get('/leads/{lead}/edit', [LeadController::class, 'edit'])->name('leads.edit');
        Route::put('/leads/{lead}', [LeadController::class, 'update'])->name('leads.update');
    });
    Route::middleware('role:office_admin,project_manager')->group(function () {
        Route::delete('/leads/{lead}', [LeadController::class, 'destroy'])->name('leads.destroy');
        Route::post('/leads/{lead}/convert', [LeadController::class, 'convertToJob'])->name('leads.convert');
    });

    // ── Jobs ──────────────────────────────────────────────────────────────────
    Route::get('/jobs', [JobController::class, 'index'])->name('jobs.index');
    Route::middleware('role:office_admin,project_manager,sales_consultant')->group(function () {
        Route::get('/jobs/create', [JobController::class, 'create'])->name('jobs.create');
        Route::post('/jobs', [JobController::class, 'store'])->name('jobs.store');
    });
    Route::get('/jobs/{job}', [JobController::class, 'show'])->name('jobs.show');
    Route::middleware('role:office_admin,project_manager,sales_consultant')->group(function () {
        Route::get('/jobs/{job}/edit', [JobController::class, 'edit'])->name('jobs.edit');
        Route::put('/jobs/{job}', [JobController::class, 'update'])->name('jobs.update');
        Route::patch('/jobs/{job}', [JobController::class, 'update']);
    });
    Route::middleware('role:office_admin,project_manager')->group(function () {
        Route::delete('/jobs/{job}', [JobController::class, 'destroy'])->name('jobs.destroy');
        Route::post('/jobs/{job}/advance-stage', [JobController::class, 'advanceStage'])->name('jobs.advance_stage');
        Route::post('/production-orders', [ProductionOrderController::class, 'store'])->name('production-orders.store');
        Route::put('/production-orders/{productionOrder}', [ProductionOrderController::class, 'update'])->name('production-orders.update');
        Route::get('/jobs/{job}/works-orders/create', [WorksOrderController::class, 'create'])->name('jobs.works-orders.create');
        Route::post('/jobs/{job}/works-orders', [WorksOrderController::class, 'store'])->name('jobs.works-orders.store');
        Route::get('/jobs/{job}/works-orders/{worksOrder}/edit', [WorksOrderController::class, 'edit'])->name('jobs.works-orders.edit');
        Route::put('/jobs/{job}/works-orders/{worksOrder}', [WorksOrderController::class, 'update'])->name('jobs.works-orders.update');
        Route::post('/jobs/{job}/works-orders/{worksOrder}/status', [WorksOrderController::class, 'updateStatus'])->name('jobs.works-orders.status');
        Route::post('/jobs/{job}/works-orders/{worksOrder}/approve-faults', [WorksOrderController::class, 'approveFaults'])->name('jobs.works-orders.approve-faults');
        Route::delete('/jobs/{job}/works-orders/{worksOrder}', [WorksOrderController::class, 'destroy'])->name('jobs.works-orders.destroy');
        Route::post('/jobs/{job}/works-orders/{worksOrder}/items', [WorksOrderController::class, 'storeItem'])->name('jobs.works-orders.items.store');
        Route::delete('/jobs/{job}/works-orders/{worksOrder}/items/{item}', [WorksOrderController::class, 'destroyItem'])->name('jobs.works-orders.items.destroy');
    });
    Route::get('/jobs/{job}/works-orders/{worksOrder}', [WorksOrderController::class, 'show'])->name('jobs.works-orders.show');
    Route::middleware('role:office_admin,project_manager,lead_installer')->group(function () {
        Route::patch('/jobs/{job}/works-orders/{worksOrder}/items/{item}', [WorksOrderController::class, 'updateItem'])->name('jobs.works-orders.items.update');
    });

    // ── Contacts ──────────────────────────────────────────────────────────────
    Route::get('/contacts', [ContactController::class, 'index'])->name('contacts.index');
    Route::middleware('role:office_admin,project_manager,sales_consultant')->group(function () {
        Route::get('/contacts/create', [ContactController::class, 'create'])->name('contacts.create');
        Route::get('/contacts/import', [ContactController::class, 'importForm'])->name('contacts.import');
        Route::post('/contacts/import', [ContactController::class, 'import'])->name('contacts.import.store');
        Route::post('/contacts', [ContactController::class, 'store'])->name('contacts.store');
    });
    Route::get('/contacts/{contact}', [ContactController::class, 'show'])->name('contacts.show');
    Route::middleware('role:office_admin,project_manager,sales_consultant')->group(function () {
        Route::get('/contacts/{contact}/edit', [ContactController::class, 'edit'])->name('contacts.edit');
        Route::put('/contacts/{contact}', [ContactController::class, 'update'])->name('contacts.update');
    });
    Route::middleware('role:office_admin')->group(function () {
        Route::delete('/contacts/{contact}', [ContactController::class, 'destroy'])->name('contacts.destroy');
    });

    // ── Calendar ──────────────────────────────────────────────────────────────
    Route::get('/calendar', [CalendarController::class, 'index'])->name('calendar.index');
    Route::middleware('role:office_admin,project_manager,sales_consultant')->group(function () {
        Route::post('/calendar', [CalendarController::class, 'store'])->name('calendar.store');
        Route::put('/calendar/{event}', [CalendarController::class, 'update'])->name('calendar.update');
        Route::delete('/calendar/{event}', [CalendarController::class, 'destroy'])->name('calendar.destroy');
    });

    // ── Material Catalogue ────────────────────────────────────────────────────
    // Public API (for quote builder JS dropdowns) — all authenticated users
    Route::get('/materials/api/type/{type}/materials', [MaterialController::class, 'materialsForType'])->name('materials.for-type');
    Route::get('/materials/api/all', [MaterialController::class, 'allTypesJson'])->name('materials.all-json');

    Route::middleware('role:office_admin,project_manager,sales_consultant')->group(function () {
        Route::get('/materials', [MaterialController::class, 'index'])->name('materials.index');
        Route::post('/materials/types', [MaterialController::class, 'storeType'])->name('materials.types.store');
        Route::put('/materials/types/{type}', [MaterialController::class, 'updateType'])->name('materials.types.update');
        Route::delete('/materials/types/{type}', [MaterialController::class, 'destroyType'])->name('materials.types.destroy');
        Route::post('/materials/types/{type}/materials', [MaterialController::class, 'storeMaterial'])->name('materials.materials.store');
        Route::put('/materials/types/{type}/materials/{material}', [MaterialController::class, 'updateMaterial'])->name('materials.materials.update');
        Route::delete('/materials/types/{type}/materials/{material}', [MaterialController::class, 'destroyMaterial'])->name('materials.materials.destroy');
    });

    // ── Quotes ────────────────────────────────────────────────────────────────
    Route::middleware('role:office_admin,project_manager,sales_consultant')->group(function () {
        Route::get('/quotes', [QuoteController::class, 'index'])->name('quotes.index');
        Route::get('/quotes/create', [QuoteController::class, 'create'])->name('quotes.create');
        Route::post('/quotes', [QuoteController::class, 'store'])->name('quotes.store');
        Route::get('/quotes/{quote}', [QuoteController::class, 'show'])->name('quotes.show');
        Route::get('/quotes/{quote}/edit', [QuoteController::class, 'edit'])->name('quotes.edit');
        Route::put('/quotes/{quote}', [QuoteController::class, 'update'])->name('quotes.update');
        Route::get('/quotes/{quote}/print', [QuoteController::class, 'print'])->name('quotes.print');
        Route::post('/quotes/{quote}/send', [QuoteController::class, 'send'])->name('quotes.send');
        Route::post('/quotes/{quote}/send-to-client', [QuoteController::class, 'sendToClient'])->name('quotes.send-to-client');
        Route::get('/quotes/{quote}/pdf', [QuoteController::class, 'downloadPdf'])->name('quotes.pdf');
        Route::post('/quotes/{quote}/accept', [QuoteController::class, 'accept'])->name('quotes.accept');
        Route::post('/quotes/{quote}/status', [QuoteController::class, 'updateStatus'])->name('quotes.status');
        Route::post('/quotes/{quote}/sections', [QuoteController::class, 'storeSection'])->name('quotes.sections.store');
        Route::put('/quotes/{quote}/sections/{section}', [QuoteController::class, 'updateSection'])->name('quotes.sections.update');
        Route::delete('/quotes/{quote}/sections/{section}', [QuoteController::class, 'destroySection'])->name('quotes.sections.destroy');
        Route::post('/quotes/{quote}/sections/{section}/items', [QuoteController::class, 'storeItem'])->name('quotes.items.store');
        Route::put('/quotes/{quote}/sections/{section}/items/{item}', [QuoteController::class, 'updateItem'])->name('quotes.items.update');
        Route::delete('/quotes/{quote}/sections/{section}/items/{item}', [QuoteController::class, 'destroyItem'])->name('quotes.items.destroy');
    });
    Route::middleware('role:office_admin,project_manager')->group(function () {
        Route::post('/quotes/{quote}/convert', [QuoteController::class, 'convertToContract'])->name('quotes.convert');
        Route::delete('/quotes/{quote}', [QuoteController::class, 'destroy'])->name('quotes.destroy');
    });

    // ── Contracts ─────────────────────────────────────────────────────────────
    Route::middleware('role:office_admin,project_manager,sales_consultant')->group(function () {
        Route::get('/contracts', [ContractController::class, 'index'])->name('contracts.index');
        Route::get('/contracts/create', [ContractController::class, 'create'])->name('contracts.create');
        Route::post('/contracts', [ContractController::class, 'store'])->name('contracts.store');
        Route::get('/contracts/{contract}', [ContractController::class, 'show'])->name('contracts.show');
        Route::get('/contracts/{contract}/edit', [ContractController::class, 'edit'])->name('contracts.edit');
        Route::put('/contracts/{contract}', [ContractController::class, 'update'])->name('contracts.update');
        Route::post('/contracts/{contract}/send', [ContractController::class, 'send'])->name('contracts.send');
    });
    Route::middleware('role:office_admin,project_manager')->group(function () {
        Route::post('/contracts/{contract}/sign', [ContractController::class, 'markSigned'])->name('contracts.sign');
        Route::post('/contracts/{contract}/payment/{field}', [ContractController::class, 'markPayment'])->name('contracts.payment');
        Route::delete('/contracts/{contract}', [ContractController::class, 'destroy'])->name('contracts.destroy');
    });

    // ── Check Measure ─────────────────────────────────────────────────────────
    Route::middleware('role:office_admin,project_manager,check_measurer,sales_consultant')->group(function () {
        Route::get('/check-measure', [CheckMeasureController::class, 'index'])->name('check_measure.index');
        Route::get('/check-measure/create', [CheckMeasureController::class, 'create'])->name('check_measure.create');
        Route::post('/check-measure', [CheckMeasureController::class, 'store'])->name('check_measure.store');
        Route::get('/check-measure/{checkMeasure}', [CheckMeasureController::class, 'show'])->name('check_measure.show');
        Route::get('/check-measure/{checkMeasure}/edit', [CheckMeasureController::class, 'edit'])->name('check_measure.edit');
        Route::put('/check-measure/{checkMeasure}', [CheckMeasureController::class, 'update'])->name('check_measure.update');
        Route::post('/check-measure/{checkMeasure}/complete', [CheckMeasureController::class, 'complete'])->name('check_measure.complete');
        Route::post('/check-measure/{checkMeasure}/checklist/{item}', [CheckMeasureController::class, 'toggleChecklist'])->name('check_measure.checklist_toggle');
        Route::post('/check-measure/{checkMeasure}/checklist', [CheckMeasureController::class, 'addChecklistItem'])->name('check_measure.checklist_add');
        Route::delete('/check-measure/{checkMeasure}/checklist/{item}', [CheckMeasureController::class, 'deleteChecklistItem'])->name('check_measure.checklist_delete');
        Route::delete('/check-measure/{checkMeasure}', [CheckMeasureController::class, 'destroy'])->name('check_measure.destroy');
    });

    // ── Processing ────────────────────────────────────────────────────────────
    Route::middleware('role:office_admin,project_manager')->group(function () {
        Route::get('/processing', [ProcessingController::class, 'index'])->name('processing.index');
        Route::get('/processing/{job}', [ProcessingController::class, 'show'])->name('processing.show');
        Route::post('/processing/{job}/orders', [ProcessingController::class, 'storeOrder'])->name('processing.store_order');
        Route::put('/processing/orders/{order}', [ProcessingController::class, 'updateOrder'])->name('processing.update_order');
        Route::post('/processing/orders/{order}/progress', [ProcessingController::class, 'updateProgress'])->name('processing.update_progress');
    });

    // ── Delivery ──────────────────────────────────────────────────────────────
    Route::middleware('role:office_admin,project_manager,lead_installer')->group(function () {
        Route::get('/delivery', [DeliveryController::class, 'index'])->name('delivery.index');
        Route::get('/delivery/create', [DeliveryController::class, 'create'])->name('delivery.create');
        Route::post('/delivery', [DeliveryController::class, 'store'])->name('delivery.store');
        Route::get('/delivery/{delivery}', [DeliveryController::class, 'show'])->name('delivery.show');
        Route::get('/delivery/{delivery}/edit', [DeliveryController::class, 'edit'])->name('delivery.edit');
        Route::put('/delivery/{delivery}', [DeliveryController::class, 'update'])->name('delivery.update');
        Route::post('/delivery/{delivery}/deliver', [DeliveryController::class, 'markDelivered'])->name('delivery.deliver');
        Route::delete('/delivery/{delivery}', [DeliveryController::class, 'destroy'])->name('delivery.destroy');
    });

    // ── Installation ──────────────────────────────────────────────────────────
    Route::middleware('role:office_admin,project_manager,lead_installer')->group(function () {
        Route::get('/installation', [InstallationController::class, 'index'])->name('installation.index');
        Route::get('/installation/create', [InstallationController::class, 'create'])->name('installation.create');
        Route::post('/installation', [InstallationController::class, 'store'])->name('installation.store');
        Route::get('/installation/{installation}', [InstallationController::class, 'show'])->name('installation.show');
        Route::get('/installation/{installation}/edit', [InstallationController::class, 'edit'])->name('installation.edit');
        Route::put('/installation/{installation}', [InstallationController::class, 'update'])->name('installation.update');
        Route::post('/installation/{installation}/complete', [InstallationController::class, 'complete'])->name('installation.complete');
        Route::post('/installation/{installation}/progress', [InstallationController::class, 'updateProgress'])->name('installation.progress');
        Route::delete('/installation/{installation}', [InstallationController::class, 'destroy'])->name('installation.destroy');
    });

    // ── Completion ────────────────────────────────────────────────────────────
    Route::middleware('role:office_admin,project_manager,lead_installer')->group(function () {
        Route::get('/completion', [CompletionController::class, 'index'])->name('completion.index');
        Route::get('/completion/create', [CompletionController::class, 'create'])->name('completion.create');
        Route::post('/completion', [CompletionController::class, 'store'])->name('completion.store');
        Route::get('/completion/{completion}', [CompletionController::class, 'show'])->name('completion.show');
        Route::get('/completion/{completion}/edit', [CompletionController::class, 'edit'])->name('completion.edit');
        Route::put('/completion/{completion}', [CompletionController::class, 'update'])->name('completion.update');
        Route::post('/completion/{completion}/finalise', [CompletionController::class, 'finalise'])->name('completion.finalise');
        Route::post('/completion/{completion}/checklist/{item}', [CompletionController::class, 'toggleChecklist'])->name('completion.checklist_toggle');
        Route::delete('/completion/{completion}', [CompletionController::class, 'destroy'])->name('completion.destroy');
    });

    // ── Documents ─────────────────────────────────────────────────────────────
    Route::post('/documents', [DocumentController::class, 'store'])->name('documents.store');
    Route::get('/documents/{document}/download', [DocumentController::class, 'download'])->name('documents.download');
    Route::middleware('role:office_admin,project_manager,sales_consultant')->group(function () {
        Route::delete('/documents/{document}', [DocumentController::class, 'destroy'])->name('documents.destroy');
    });

    // ── Reports ───────────────────────────────────────────────────────────────
    Route::middleware('role:office_admin,project_manager,accounts')->group(function () {
        Route::get('/reports', [ReportController::class, 'index'])->name('reports.index');
        Route::get('/reports/gross-profit', [ReportController::class, 'grossProfit'])->name('reports.gross-profit');
        Route::get('/reports/gross-profit-by-quote', [ReportController::class, 'grossProfitByQuote'])->name('reports.gross-profit-quote');
        Route::get('/reports/client-summary', [ReportController::class, 'clientSummary'])->name('reports.client-summary');
        Route::get('/reports/timesheet', [ReportController::class, 'timesheetWeekly'])->name('reports.timesheet');
        Route::post('/reports/timesheet/send', [ReportController::class, 'timesheetWeeklySend'])->name('reports.timesheet.send');
        Route::get('/reports/timesheet/export', [ReportController::class, 'timesheetWeeklyExport'])->name('reports.timesheet.export');
        Route::post('/reports/scheduled', [ReportController::class, 'storeScheduled'])->name('reports.scheduled.store');
        Route::post('/reports/scheduled/{scheduledReport}/toggle', [ReportController::class, 'toggleScheduled'])->name('reports.scheduled.toggle');
        Route::delete('/reports/scheduled/{scheduledReport}', [ReportController::class, 'destroyScheduled'])->name('reports.scheduled.destroy');
    });

    // ── Notifications ─────────────────────────────────────────────────────────
    Route::post('/notifications/{notification}/read', [NotificationController::class, 'markRead'])->name('notifications.read');
    Route::post('/notifications/read-all', [NotificationController::class, 'markAllRead'])->name('notifications.read-all');

    // ── Settings ──────────────────────────────────────────────────────────────
    Route::middleware('role:office_admin')->group(function () {
        Route::get('/settings', [SettingsController::class, 'index'])->name('settings.index');
        Route::post('/settings', [SettingsController::class, 'update'])->name('settings.update');
        Route::post('/settings/logo', [SettingsController::class, 'uploadLogo'])->name('settings.logo');
        Route::get('/settings/users', [SettingsController::class, 'users'])->name('settings.users');
        Route::post('/settings/users', [SettingsController::class, 'storeUser'])->name('settings.users.store');
        Route::put('/settings/users/{user}', [SettingsController::class, 'updateUser'])->name('settings.users.update');
        Route::post('/settings/users/{user}/toggle', [SettingsController::class, 'toggleUser'])->name('settings.users.toggle');
        Route::post('/settings/password', [SettingsController::class, 'changePassword'])->name('settings.password');
        Route::get('/settings/permissions', [SettingsController::class, 'permissions'])->name('settings.permissions');
        Route::post('/settings/permissions/{role}', [SettingsController::class, 'updatePermissions'])->name('settings.permissions.update');
    });

    // ── Timesheet ─────────────────────────────────────────────────────────────
    Route::get('/timesheet', [TimesheetController::class, 'index'])->name('timesheet.index');
    Route::post('/timesheet/start', [TimesheetController::class, 'start'])->name('timesheet.start');
    Route::post('/timesheet/stop', [TimesheetController::class, 'stop'])->name('timesheet.stop');
    Route::delete('/timesheet/{entry}', [TimesheetController::class, 'destroy'])->name('timesheet.destroy');
    Route::middleware('role:office_admin,project_manager,accounts')->group(function () {
        Route::get('/timesheet/admin', [TimesheetController::class, 'admin'])->name('timesheet.admin');
    });

    // ── Staff Invoices ────────────────────────────────────────────────────────
    Route::get('/staff-invoices', [StaffInvoiceController::class, 'index'])->name('staff-invoices.index');
    Route::get('/staff-invoices/{staffInvoice}', [StaffInvoiceController::class, 'show'])->name('staff-invoices.show');
    Route::post('/staff-invoices/request-approval', [StaffInvoiceController::class, 'requestApproval'])->name('staff-invoices.request-approval');
    Route::middleware('role:office_admin,accounts')->group(function () {
        Route::post('/staff-invoices/generate', [StaffInvoiceController::class, 'generate'])->name('staff-invoices.generate');
        Route::post('/staff-invoices/{staffInvoice}/approve', [StaffInvoiceController::class, 'approve'])->name('staff-invoices.approve');
        Route::post('/staff-invoices/{staffInvoice}/reject', [StaffInvoiceController::class, 'reject'])->name('staff-invoices.reject');
        Route::post('/staff-invoices/{staffInvoice}/paid', [StaffInvoiceController::class, 'markPaid'])->name('staff-invoices.paid');
    });

    // ── Staff Task Types ──────────────────────────────────────────────────────
    Route::middleware('role:office_admin')->group(function () {
        Route::get('/staff-tasks', [StaffTaskTypeController::class, 'index'])->name('staff-tasks.index');
        Route::post('/staff-tasks', [StaffTaskTypeController::class, 'store'])->name('staff-tasks.store');
        Route::put('/staff-tasks/{staffTaskType}', [StaffTaskTypeController::class, 'update'])->name('staff-tasks.update');
        Route::delete('/staff-tasks/{staffTaskType}', [StaffTaskTypeController::class, 'destroy'])->name('staff-tasks.destroy');
    });

    // ── Purchase Orders ───────────────────────────────────────────────────────
    Route::middleware('role:office_admin,project_manager,accounts')->group(function () {
        Route::get('/purchase-orders', [\App\Http\Controllers\PurchaseOrderController::class, 'index'])->name('purchase-orders.index');
        Route::get('/purchase-orders/create', [\App\Http\Controllers\PurchaseOrderController::class, 'create'])->name('purchase-orders.create');
        Route::post('/purchase-orders', [\App\Http\Controllers\PurchaseOrderController::class, 'store'])->name('purchase-orders.store');
        Route::get('/purchase-orders/{purchaseOrder}', [\App\Http\Controllers\PurchaseOrderController::class, 'show'])->name('purchase-orders.show');
        Route::get('/purchase-orders/{purchaseOrder}/edit', [\App\Http\Controllers\PurchaseOrderController::class, 'edit'])->name('purchase-orders.edit');
        Route::put('/purchase-orders/{purchaseOrder}', [\App\Http\Controllers\PurchaseOrderController::class, 'update'])->name('purchase-orders.update');
        Route::delete('/purchase-orders/{purchaseOrder}', [\App\Http\Controllers\PurchaseOrderController::class, 'destroy'])->name('purchase-orders.destroy');
        Route::get('/purchase-orders/{purchaseOrder}/receive', [\App\Http\Controllers\PurchaseOrderController::class, 'receiveForm'])->name('purchase-orders.receive');
        Route::post('/purchase-orders/{purchaseOrder}/receive', [\App\Http\Controllers\PurchaseOrderController::class, 'receiveStore'])->name('purchase-orders.receive.store');
        Route::post('/purchase-orders/{purchaseOrder}/allocate', [\App\Http\Controllers\PurchaseOrderController::class, 'allocate'])->name('purchase-orders.allocate');
    });

    // ── Inventory ─────────────────────────────────────────────────────────────
    Route::middleware('role:office_admin,project_manager,accounts')->group(function () {
        Route::get('/inventory', [\App\Http\Controllers\InventoryController::class, 'index'])->name('inventory.index');
         Route::get('/inventory/direct-add',  [\App\Http\Controllers\InventoryController::class, 'directCreate'])->name('inventory.direct-add');
        Route::post('/inventory/direct-add', [\App\Http\Controllers\InventoryController::class, 'directStore'])->name('inventory.direct-store');
        Route::get('/inventory/{stock}/edit',   [\App\Http\Controllers\InventoryController::class, 'edit'])->name('inventory.edit');
Route::put('/inventory/{stock}',        [\App\Http\Controllers\InventoryController::class, 'update'])->name('inventory.update');
Route::delete('/inventory/{stock}',     [\App\Http\Controllers\InventoryController::class, 'destroy'])->name('inventory.destroy');
        // Deallocate must be defined before {stock} to avoid route binding conflicts
        Route::delete('/inventory/allocations/{allocation}', [\App\Http\Controllers\InventoryController::class, 'deallocate'])->name('inventory.deallocate');
        Route::get('/inventory/{stock}', [\App\Http\Controllers\InventoryController::class, 'show'])->name('inventory.show');
        Route::post('/inventory/{stock}/adjust', [\App\Http\Controllers\InventoryController::class, 'adjust'])->name('inventory.adjust');
        Route::post('/inventory/{stock}/allocate', [\App\Http\Controllers\InventoryController::class, 'allocate'])->name('inventory.allocate');
        Route::post('/inventory/{stock}/reorder', [\App\Http\Controllers\InventoryController::class, 'reorder'])->name('inventory.reorder');
    
       
        });

    // ── Job Variants ──────────────────────────────────────────────────────────
    Route::middleware('role:office_admin,project_manager,sales_consultant')->group(function () {
        Route::get('/jobs/{job}/variants', [\App\Http\Controllers\JobVariantController::class, 'index'])->name('jobs.variants');
        Route::post('/jobs/{job}/variants', [\App\Http\Controllers\JobVariantController::class, 'store'])->name('jobs.variants.store');
        Route::post('/jobs/{job}/variants/{variant}/accept', [\App\Http\Controllers\JobVariantController::class, 'accept'])->name('jobs.variants.accept');
        Route::post('/jobs/{job}/variants/{variant}/reject', [\App\Http\Controllers\JobVariantController::class, 'reject'])->name('jobs.variants.reject');
        Route::delete('/jobs/{job}/variants/{variant}', [\App\Http\Controllers\JobVariantController::class, 'destroy'])->name('jobs.variants.destroy');
        Route::post('/jobs/{job}/invoices', [\App\Http\Controllers\JobInvoiceController::class, 'store'])->name('jobs.invoices.store');
        Route::delete('/jobs/{job}/invoices/{invoice}', [\App\Http\Controllers\JobInvoiceController::class, 'destroy'])->name('jobs.invoices.destroy');
    });

    // ── Gross Profit Detailed ─────────────────────────────────────────────────
    Route::middleware('role:office_admin,project_manager,accounts')->group(function () {
        Route::get('/reports/gross-profit/{job}', [\App\Http\Controllers\GrossProfitDetailController::class, 'show'])->name('reports.gross-profit.show');
        Route::get('/reports/gross-profit/{job}/pdf', [\App\Http\Controllers\GrossProfitDetailController::class, 'pdf'])->name('reports.gross-profit.pdf');
    });

});
