<?php

// routes/web.php
use App\Http\Controllers\AdminController;
use App\Http\Controllers\ApplicantController;
use App\Http\Controllers\AuthController;
use App\Http\Controllers\UserController;
use App\Http\Controllers\CompanyDetailsController;
use App\Http\Controllers\OperationDetailsController;  
use App\Http\Controllers\VesselDetailsController; 
use Illuminate\Foundation\Auth\EmailVerificationRequest;
use Illuminate\Support\Facades\Route;

// Guest routes
Route::middleware('guest')->group(function () {
    Route::get('/login', [AuthController::class, 'showLoginForm'])->name('login');
    Route::post('/login', [AuthController::class, 'login']);
    Route::get('/register', [AuthController::class, 'showRegisterForm'])->name('register');
    Route::post('/register', [AuthController::class, 'register']);
});

// Email verification routes
Route::middleware('auth')->group(function () {
    Route::get('/email/verify', function () {
        return view('auth.verify-email');
    })->name('verification.notice');

    Route::get('/email/verify/{id}/{hash}', function (EmailVerificationRequest $request) {
        $request->fulfill();
        return redirect()->route('applicant.dashboard');
    })->middleware('signed')->name('verification.verify');

    Route::post('/email/verification-notification', function (Request $request) {
        $request->user()->sendEmailVerificationNotification();
        return back()->with('message', 'Verification link sent!');
    })->middleware('throttle:6,1')->name('verification.send');
});

// Authenticated routes
Route::middleware(['auth', 'verified'])->group(function () {
    Route::post('/logout', [AuthController::class, 'logout'])->name('logout');



    // Admin routes
    Route::middleware(['auth', 'role:admin'])->prefix('admin')->name('admin.')->group(function () {
    Route::get('/dashboard', [AdminController::class, 'dashboard'])->name('dashboard');
    Route::get('/users/create', [AdminController::class, 'createUser'])->name('users.create');
    Route::post('/users', [AdminController::class, 'storeUser'])->name('users.store');
    Route::get('/users/{user}/edit', [AdminController::class, 'editUser'])->name('users.edit');
    Route::put('/users/{user}', [AdminController::class, 'updateUser'])->name('users.update');
    Route::delete('/users/{user}', [AdminController::class, 'deleteUser'])->name('users.delete');
    Route::post('/profiles/{profile}/review', [AdminController::class, 'reviewProfile'])->name('admin.profiles.review');
    //    Route::get('/applications/{application}', [AdminController::class, 'showApplication'])->name('applications.show');
    Route::patch('/applications/{application}/approve', [AdminController::class, 'approveApplication'])->name('applications.approve');
    Route::patch('/applications/{application}/reject', [AdminController::class, 'rejectApplication'])->name('applications.reject');
    
    Route::patch('/licenses/{license}/revoke', [AdminController::class, 'revokeLicense'])->name('licenses.revoke');
    Route::patch('/licenses/{license}/reinstate', [AdminController::class, 'reinstateLicense'])->name('licenses.reinstate');
    Route::get('/applications/{application}', [AdminController::class, 'showApplication'])->name('applications.show');




});

    
    

    // User (Reviewer) routes
    Route::middleware('role:user')->prefix('reviewer')->group(function () {
        Route::get('/dashboard', [UserController::class, 'dashboard'])->name('user.dashboard');
        Route::post('/applications/{application}/review', [UserController::class, 'reviewApplication'])
            ->name('applications.review');
        Route::post('/profiles/{profile}/review', [UserController::class, 'reviewProfile'])
        ->name('profiles.review');
        Route::get('/profiles/{profile}/document/{document}', [UserController::class, 'viewDocument'])
        ->name('profiles.document');

    });

    // Applicant routes
    Route::middleware(['auth', 'role:applicant'])->prefix('applicant')->name('applicant.')->group(function () {
    Route::get('/dashboard', [ApplicantController::class, 'dashboard'])->name('dashboard');
 
    Route::get('/profile/create', [ApplicantController::class, 'createProfile'])->name('profile.create');
    Route::get('/profile/{profile}/edit', [ApplicantController::class, 'editProfile'])->name('profile.edit');
    Route::post('/profile', [ApplicantController::class, 'storeProfile'])->name('profile.store');
    Route::put('/profile/{profile}', [ApplicantController::class, 'updateProfile'])->name('profile.update');
    Route::post('/application', [ApplicantController::class, 'submitApplication'])->name('submit');
    Route::get('/application/{application}', [ApplicantController::class, 'showApplication'])->name('application.show');
});

    Route::middleware('auth')->group(function () {
    Route::resource('company-details', CompanyDetailsController::class);
    Route::resource('operation-details', OperationDetailsController::class);
    Route::resource('vessel-details', VesselDetailsController::class);
});

    // company details route for create
//Route::get('/applicant/company/create', [CompanyDetailsController::class, 'create'])
//   ->name('applicant.company.create');

// company details route for store
//Route::post('/applicant/company', [CompanyDetailsController::class, 'store'])
//    ->name('applicant.company.store');

Route::middleware(['auth', 'role:applicant'])->prefix('applicant')->name('applicant.')->group(function () {
    Route::get('/dashboard', [ApplicantController::class, 'dashboard'])->name('dashboard');
 
    Route::get('/profile/create', [ApplicantController::class, 'createProfile'])->name('profile.create');
    Route::get('/profile/{profile}/edit', [ApplicantController::class, 'editProfile'])->name('profile.edit');
    Route::post('/profile', [ApplicantController::class, 'storeProfile'])->name('profile.store');
    Route::put('/profile/{profile}', [ApplicantController::class, 'updateProfile'])->name('profile.update');
    Route::post('/application', [ApplicantController::class, 'submitApplication'])->name('submit');
    Route::get('/application/{application}', [ApplicantController::class, 'showApplication'])->name('application.show');
    
    // Add resource routes here with custom names
    Route::resource('company', CompanyDetailsController::class)->parameters([
        'company' => 'companyDetails'
    ])->names([
        'index' => 'company.index',
        'create' => 'company.create',
        'store' => 'company.store',
        'show' => 'company.show',
        'edit' => 'company.edit',
        'update' => 'company.update',
        'destroy' => 'company.destroy',
    ]);
    
    Route::resource('operation', OperationDetailsController::class)->parameters([
        'operation' => 'operationDetails'
    ])->names([
        'index' => 'operation.index',
        'create' => 'operation.create',
        'store' => 'operation.store',
        'show' => 'operation.show',
        'edit' => 'operation.edit',
        'update' => 'operation.update',
        'destroy' => 'operation.destroy',
    ]);
    
    Route::resource('vessel', VesselDetailsController::class)->parameters([
        'vessel' => 'vesselDetails'
    ])->names([
        'index' => 'vessel.index',
        'create' => 'vessel.create',
        'store' => 'vessel.store',
        'show' => 'vessel.show',
        'edit' => 'vessel.edit',
        'update' => 'vessel.update',
        'destroy' => 'vessel.destroy',
    ]);
});
    Route::get('/admin/audit-logs/print', [AdminController::class, 'printAuditLogs'])
    ->name('admin.audit-logs.print')
    ->middleware(['auth', 'role:admin']);

    Route::get('/', function () {
    if (Auth::check()) {
        $role = Auth::user()->role;
        return match($role) {
            'admin' => redirect()->route('admin.dashboard'),
            'user' => redirect()->route('user.dashboard'),
            'applicant' => redirect()->route('applicant.dashboard'),
            default => redirect()->route('login'),
        };
    }
    return redirect()->route('login');
})->name('home');
});