<?php

use App\Mail\Payout;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\RoleController;
use App\Http\Controllers\UserController;
use App\Http\Controllers\ConfigController;
use App\Http\Controllers\TaglineController;
use App\Http\Controllers\Auth\AuthController;
use App\Http\Controllers\DashboardController;
use App\Http\Controllers\MyProfileController;
use App\Http\Controllers\PermissionController;
use App\Http\Controllers\ProfessionController;
use App\Http\Controllers\DisbursementController;
use App\Http\Controllers\ProfessionalController;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/


Route::group(['middleware' => 'guest'], function () {

    Route::get('', [AuthController::class, 'getLogin'])->name('login');

    Route::group(['prefix' => 'login'], function () {
        Route::get('/', [AuthController::class, 'getLogin'])->name('login');
        Route::post('/', [AuthController::class, 'postLogin'])->name('login');
    });

    Route::group(['prefix' => 'forgot-password'], function () {
        Route::get('/', [AuthController::class, 'getForgotPassword'])->name('forgot-password');
        Route::post('/', [AuthController::class, 'postForgotPassword'])->name('forgot-password');
    });

    Route::group(['prefix' => 'set-password'], function () {
        Route::get('/', [AuthController::class, 'setPassword'])->name('set-password');
        Route::post('/', [AuthController::class, 'updatePassword'])->name('update-password');
    });
});

Route::group(['middleware' => 'auth'], function () {

    Route::get('auth/logout', [AuthController::class, 'logout'])->name('logout');

    Route::group(['prefix' => 'myprofile'], function () {
        Route::get('/', [MyProfileController:: class, 'index'])->name('myprofile');
        Route::get('/edit', [MyProfileController:: class, 'edit'])->name('myprofile.edit');
        Route::post('/update', [MyProfileController:: class, 'update'])->name('myprofile.update');
        Route::post('/crop', [MyProfileController:: class, 'crop'])->name('myprofile.crop');
        Route::post('/upload', [MyProfileController:: class, 'upload'])->name('myprofile.upload');
        Route::get('/change-password', [MyProfileController:: class, 'changePassword'])->name('myprofile.change-password');
        Route::put('/update-password', [MyProfileController:: class, 'updatePassword'])->name('myprofile.update-password');
    });

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

    Route::group(['prefix' => 'users'], function () {
        Route::get('/', [UserController::class, 'index'])->name('users')->middleware('validateSystemAccess:User.List');
        Route::get('/create', [UserController::class, 'create'])->name('users.create')->middleware('validateSystemAccess:User.Create');
        Route::get('/{id}/edit', [UserController::class, 'edit'])->name('users.edit')->middleware('validateSystemAccess:User.Update');
        Route::get('/{id}/details', [UserController::class, 'show'])->name('users.show')->middleware('validateSystemAccess:User.View');
        Route::post('/', [UserController::class, 'store'])->name('users.store')->middleware('validateUserAction:User.Create');
        Route::put('/{id}/update', [UserController::class, 'update'])->name('users.update')->middleware('validateUserAction:User.Update');
        Route::patch('/update-status/{id}', [UserController::class, 'updateStatus'])->middleware('validateUserAction:User.Update');
        Route::delete('/{id}', [UserController::class, 'destroy'])->name('users.destroy')->middleware('validateUserAction:User.Delete');
        Route::get('/{id}/get-by-role', [UserController::class, 'getByRole']);
        Route::get('/check-user', [UserController::class, 'checkUser']);
    });

    Route::group(['prefix' => 'roles'], function () {
        Route::get('/', [RoleController::class, 'index'])->name('roles')->middleware('validateSystemAccess:Role.List');
        Route::get('/create', [RoleController::class, 'create'])->name('roles.create')->middleware('validateSystemAccess:Role.Create');
        Route::get('/{id}/edit', [RoleController::class, 'edit'])->name('roles.edit')->middleware('validateSystemAccess:Role.Update');
        Route::get('/{id}/get-role-details', [RoleController::class, 'show'])->name('roles.show')->middleware('validateSystemAccess:Role.View');
        Route::post('/', [RoleController::class, 'store'])->name('roles.store')->middleware('validateUserAction:Role.Create');
        Route::put('/{id}/update', [RoleController::class, 'update'])->name('roles.update')->middleware('validateUserAction:Role.Update');
        Route::delete('/{id}', [RoleController::class, 'destroy'])->name('roles.destroy')->middleware('validateUserAction:Role.Delete');
        Route::get('/check-name', [RoleController::class, 'checkName']);
    });

    Route::group(['prefix' => 'permissions'], function () {
        Route::get('/', [PermissionController::class, 'index'])->name('permissions')->middleware('validateSystemAccess:Permission.List');
    });

    Route::group(['prefix' => 'professions'], function () {
        Route::get('/', [ProfessionController::class, 'index'])->name('professions')->middleware('validateSystemAccess:Profession.List');
        Route::get('/create', [ProfessionController::class, 'create'])->name('professions.create')->middleware('validateSystemAccess:Profession.Create');
        Route::get('/{id}/edit', [ProfessionController::class, 'edit'])->name('professions.edit')->middleware('validateSystemAccess:Profession.Update');
        Route::get('/{id}/get-profession-details', [ProfessionController::class, 'show'])->name('professions.show')->middleware('validateSystemAccess:Profession.View');
        Route::post('/', [ProfessionController::class, 'store'])->name('professions.store')->middleware('validateUserAction:Profession.Create');
        Route::put('/{id}/update', [ProfessionController::class, 'update'])->name('professions.update')->middleware('validateUserAction:Profession.Update');
        Route::delete('/{id}', [ProfessionController::class, 'destroy'])->name('professions.destroy')->middleware('validateUserAction:Profession.Delete');
        Route::get('/check-name', [ProfessionController::class, 'checkName']);
    });
    Route::group(['prefix' => 'professionals'], function () {
        Route::get('/', [ProfessionalController::class, 'index'])->name('professionals')->middleware('validateSystemAccess:Professional.List');
        Route::put('/{id}/approve', [ProfessionalController::class, 'approve'])->name('professionals.approve')->middleware('validateSystemAccess:Professional.Review');
        Route::put('/{id}/decline', [ProfessionalController::class, 'decline'])->name('professionals.decline')->middleware('validateSystemAccess:Professional.Review');
        Route::put('/{id}/update-status', [ProfessionalController::class, 'updateStatus'])->name('professionals.update-status')->middleware('validateSystemAccess:Professional.Review');
        Route::get('/{id}/view-profile', [ProfessionalController::class, 'viewProfile']);
        Route::get('/{id}/application-details', [ProfessionalController::class, 'viewApplication'])->name('professionals.application');

    });
    Route::group(['prefix' => 'taglines'], function () {
        Route::get('/', [TaglineController::class, 'index'])->name('taglines')->middleware('validateSystemAccess:Tagline.List');
        Route::get('/create', [TaglineController::class, 'create'])->name('taglines.create')->middleware('validateSystemAccess:Tagline.Create');
        Route::get('/{id}/edit', [TaglineController::class, 'edit'])->name('taglines.edit')->middleware('validateSystemAccess:Tagline.Update');
        Route::get('/{id}/get-tagline-details', [TaglineController::class, 'show'])->name('taglines.show')->middleware('validateSystemAccess:Tagline.View');
        Route::post('/', [TaglineController::class, 'store'])->name('taglines.store')->middleware('validateUserAction:Tagline.Create');
        Route::put('/{id}/update', [TaglineController::class, 'update'])->name('taglines.update')->middleware('validateUserAction:Tagline.Update');
        Route::delete('/{id}', [TaglineController::class, 'destroy'])->name('taglines.destroy')->middleware('validateUserAction:Tagline.Delete');
        Route::get('/check-tagline', [TaglineController::class, 'checkTagline']);
    });

    Route::group(['prefix' => 'professionals'], function () {
        Route::get('/{id}/get-by-profession', [ProfessionalController::class, 'getByProfession']);
    });

    Route::group(['prefix' => 'disbursements'], function () {
        Route::get('/', [DisbursementController::class, 'index'])->name('disbursements')->middleware('validateSystemAccess:Disbursement.List');
        Route::get('/create', [DisbursementController::class, 'create'])->name('disbursements.create');
        Route::post('/filter', [DisbursementController::class, 'create'])->name('disbursements.filter');
        Route::post('/disburse', [DisbursementController::class, 'store'])->name('disbursements.disburse');
        Route::get('/{payoutRef}/disburse', [DisbursementController::class, 'show'])->name('disbursementsDetails');
    });

    Route::group(['prefix' => 'fees'], function () {
        Route::get('/', [ConfigController::class, 'getFees'])->name('fees')->middleware('validateSystemAccess:ConfigFee.View');
        Route::post('/', [ConfigController::class, 'storeFees'])->name('fees.store')->middleware('validateUserAction:ConfigFee.Update');
    });

});

Route::get('permission-denied', function () {
    return view('errors.permission-denied');
});

Route::get('action-denied', function () {
    return view('errors.action-denied');
});


Route::get('/mail', function () {
    return view('emails.test');
});
