<?php

use App\Http\Controllers\Backoffice\AccountsController;
use App\Http\Controllers\Backoffice\CompanyProfilesController;
use App\Http\Controllers\Backoffice\Auth\LoginController;
use App\Http\Controllers\Backoffice\ContentController;
use App\Http\Controllers\Backoffice\DashboardController;
use App\Http\Controllers\Backoffice\AdminUsersController;
use App\Http\Controllers\Backoffice\Auth\ForgotPasswordController;
use App\Http\Controllers\Backoffice\Auth\ResetPasswordController;
use App\Http\Controllers\Backoffice\MediaManagerController;
use App\Http\Controllers\Backoffice\SubscriptionPlansController;
use App\Http\Controllers\Backoffice\UsersController;
use App\Http\Controllers\Backoffice\MenuController;
use App\Support\Backoffice\Sanitizer\Security\XSSCleaner;
use Illuminate\Support\Facades\Route;

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

Route::middleware(['guest', 'guest:admin'])->group(function () {
    Route::get('/login', [LoginController::class, 'showLoginForm'])->name('login');
    Route::post('/login', [LoginController::class, 'login']);
    Route::get('/password/reset', [ForgotPasswordController::class, 'showLinkRequestForm'])->name('password.request');
    Route::post('/password/email', [ForgotPasswordController::class, 'sendResetLinkEmail'])->name('password.email');
    Route::get('/password/reset/{token}', [ResetPasswordController::class, 'showResetForm'])->name('password.reset');
    Route::post('/password/reset', [ResetPasswordController::class, 'reset'])->name('password.update');
});

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

    Route::get('admin-users', [AdminUsersController::class, 'getIndex'])->middleware('auth.admin.permission:users.view');
    Route::post('admin-users/list', [AdminUsersController::class, 'postList'])->middleware('auth.admin.permission:users.view');
    Route::get('admin-users/edit/{userId?}', [AdminUsersController::class, 'getEdit'])->where('userId', '[0-9]+');
    Route::post('admin-users/edit/{userId?}', [AdminUsersController::class, 'postEdit'])->where('userId', '[0-9]+');
    Route::delete('admin-users/delete/{userId?}', [AdminUsersController::class, 'postDelete'])->where('userId', '[0-9]+');

    Route::get('users', [UsersController::class, 'getIndex']);
    Route::post('users/list', [UsersController::class, 'postList']);
    Route::get('users/edit/{userId}', [UsersController::class, 'getEdit'])->where('userId', '[0-9]+');
    Route::post('users/edit/{userId}', [UsersController::class, 'postEdit'])->where('userId', '[0-9]+');
    Route::delete('users/delete/{userId}', [UsersController::class, 'postDelete'])->where('userId', '[0-9]+');
    Route::post('users/resend/{userId}', [UsersController::class, 'postResend'])->where('userId', '[0-9]+');

    Route::get('accounts', [AccountsController::class, 'getIndex'])
        ->middleware('auth.admin.permission:accounts.manage');
    Route::post('accounts/list', [AccountsController::class, 'postList'])
        ->middleware('auth.admin.permission:accounts.manage');
    Route::get('accounts/create', [AccountsController::class, 'getCreate'])
        ->middleware('auth.admin.permission:accounts.manage');
    Route::post('accounts/create', [AccountsController::class, 'postCreate'])
        ->middleware('auth.admin.permission:accounts.manage');
    Route::get('accounts/manage/{accountId}', [AccountsController::class, 'getEdit'])->where('accountId', '[0-9]+')
        ->middleware('auth.admin.permission:accounts.manage');
    Route::get('accounts/{accountId}', [AccountsController::class, 'getAccount'])->where('accountId', '[0-9]+')
        ->middleware('auth.admin.permission:accounts.manage');
    Route::put('accounts/{accountId}/address', [AccountsController::class, 'saveAddress'])->where('accountId', '[0-9]+')
        ->middleware('auth.admin.permission:accounts.manage');
    Route::get('accounts/{accountId}/address/{type}', [AccountsController::class, 'getAddress'])
        ->where('accountId', '[0-9]+')
        ->middleware('auth.admin.permission:accounts.manage');
    Route::put('accounts/{accountId}', [AccountsController::class, 'updateAccount'])->where('accountId', '[0-9]+')
        ->middleware('auth.admin.permission:accounts.manage');
    // Account Team Members
    Route::get('accounts/{accountId}/members', [AccountsController::class, 'getMembers'])
        ->where('accountId', '[0-9]+')
        ->middleware('auth.admin.permission:accounts.manage');
    Route::post('accounts/{accountId}/members', [AccountsController::class, 'inviteMember'])
        ->where('accountId', '[0-9]+')
        ->middleware('auth.admin.permission:accounts.manage');
    Route::post('accounts/{accountId}/members/attach', [AccountsController::class, 'attachMember'])
        ->where('accountId', '[0-9]+')
        ->middleware('auth.admin.permission:accounts.manage');
    Route::put('accounts/{accountId}/members/{memberId}', [AccountsController::class, 'updateMember'])
        ->where(['accountId' => '[0-9]+', 'memberId' => '[0-9]+'])
        ->middleware('auth.admin.permission:accounts.manage');
    Route::delete('accounts/{accountId}/members/{memberId}', [AccountsController::class, 'deleteMember'])
        ->where(['accountId' => '[0-9]+', 'memberId' => '[0-9]+'])
        ->middleware('auth.admin.permission:accounts.manage');
    // Account Invoices
    Route::get('accounts/{accountId}/invoices', [AccountsController::class, 'getInvoices'])
        ->where('accountId', '[0-9]+')
        ->middleware('auth.admin.permission:accounts.manage');
    Route::get('accounts/{accountId}/invoices/{invoiceId}', [AccountsController::class, 'getInvoice'])
        ->where(['accountId' => '[0-9]+', 'invoiceId' => '[0-9]+'])
        ->middleware('auth.admin.permission:accounts.manage');
    Route::post('accounts/{accountId}/invoices', [AccountsController::class, 'storeInvoice'])
        ->where('accountId', '[0-9]+')
        ->middleware('auth.admin.permission:accounts.manage');
    Route::put('accounts/{accountId}/invoices/{invoiceId}', [AccountsController::class, 'updateInvoice'])
        ->where(['accountId' => '[0-9]+', 'invoiceId' => '[0-9]+'])
        ->middleware('auth.admin.permission:accounts.manage');
    Route::delete('accounts/{accountId}/invoices/{invoiceId}', [AccountsController::class, 'deleteInvoice'])
        ->where(['accountId' => '[0-9]+', 'invoiceId' => '[0-9]+'])
        ->middleware('auth.admin.permission:accounts.manage');
    Route::get('accounts/{accountId}/past-subscriptions', [AccountsController::class, 'getPastAccountSubscriptions'])->where('accountId', '[0-9]+')
        ->middleware('auth.admin.permission:accounts.manage');
    Route::post('subscriptions/{subscriptionId}/cancel', [AccountsController::class, 'cancelSubscription'])->where('subscriptionId', '[0-9]+')
        ->middleware('auth.admin.permission:accounts.manage');
    Route::post('subscriptions/{subscriptionId}/renew', [AccountsController::class, 'renewSubscription'])->where('subscriptionId', '[0-9]+')
        ->middleware('auth.admin.permission:accounts.manage');
    Route::post('subscriptions/{subscriptionId}/activate', [AccountsController::class, 'activateSubscription'])->where('subscriptionId', '[0-9]+')
        ->middleware('auth.admin.permission:accounts.manage');

    Route::get('subscription-plans', [SubscriptionPlansController::class, 'getIndex'])
        ->middleware('auth.admin.permission:accounts.manage');
    Route::post('subscription-plans/list', [SubscriptionPlansController::class, 'getSubscriptionPlans'])
        ->middleware('auth.admin.permission:accounts.manage');
    Route::post('rewards/list', [SubscriptionPlansController::class, 'getSubscriptionRewards'])
        ->middleware('auth.admin.permission:accounts.manage');
    Route::post('subscription-plan/auto-complete', [SubscriptionPlansController::class, 'postSubscriptionPlanAutoComplete'])
        ->middleware('auth.admin.permission:accounts.manage');
    Route::post('subscription-plan-options/auto-complete', [SubscriptionPlansController::class, 'postSubscriptionPlanOptionsAutoComplete'])
        ->middleware('auth.admin.permission:accounts.manage');
    Route::get('subscription-plans/edit', [SubscriptionPlansController::class, 'getEdit'])
        ->middleware('auth.admin.permission:accounts.manage');
    Route::get('subscription-plans/edit/{planId}', [SubscriptionPlansController::class, 'getEdit'])
        ->middleware('auth.admin.permission:accounts.manage');
    Route::post('subscription-plans/edit/{planId?}', [SubscriptionPlansController::class, 'postEdit'])
        ->middleware('auth.admin.permission:accounts.manage');

    Route::get('subscriptions/{subscriptionId}', [AccountsController::class, 'getSubscription'])->where('subscriptionId', '[0-9]+')
        ->middleware('auth.admin.permission:accounts.manage');
    Route::put('subscriptions/{subscriptionId}', [AccountsController::class, 'updateSubscription'])->where('subscriptionId', '[0-9]+')
        ->middleware('auth.admin.permission:accounts.manage');
    Route::post('subscriptions', [AccountsController::class, 'createSubscription'])
        ->middleware('auth.admin.permission:accounts.manage');

    Route::get('company-profiles', [CompanyProfilesController::class, 'getIndex'])
        ->middleware('auth.admin.permission:accounts.manage');
    Route::post('company-profiles/list', [CompanyProfilesController::class, 'postList'])
        ->middleware('auth.admin.permission:accounts.manage');
    Route::get('company-profiles/create', [CompanyProfilesController::class, 'getCreate'])
        ->middleware('auth.admin.permission:accounts.manage');
    Route::post('company-profiles/create', [CompanyProfilesController::class, 'postCreate'])
        ->middleware('auth.admin.permission:accounts.manage');
    Route::get('company-profiles/manage/{profileId}', [CompanyProfilesController::class, 'getEdit'])
        ->where('profileId', '[0-9]+')
        ->middleware('auth.admin.permission:accounts.manage');
    Route::get('company-profiles/{profileId}', [CompanyProfilesController::class, 'getCompanyProfile'])
        ->where('profileId', '[0-9]+')
        ->middleware('auth.admin.permission:accounts.manage');
    Route::put('company-profiles/{profileId}', [CompanyProfilesController::class, 'updateCompanyProfile'])
        ->where('profileId', '[0-9]+')
        ->middleware('auth.admin.permission:accounts.manage');
    Route::get('company-profiles/{profileId}/offices', [CompanyProfilesController::class, 'getOffices'])
        ->where('profileId', '[0-9]+')
        ->middleware('auth.admin.permission:accounts.manage');
    Route::post('company-profiles/{profileId}/offices', [CompanyProfilesController::class, 'createOffice'])
        ->where('profileId', '[0-9]+')
        ->middleware('auth.admin.permission:accounts.manage');
    Route::put('company-profiles/{profileId}/offices/{officeId}', [CompanyProfilesController::class, 'updateOffice'])
        ->where(['profileId' => '[0-9]+', 'officeId' => '[0-9]+'])
        ->middleware('auth.admin.permission:accounts.manage');
    Route::delete('company-profiles/{profileId}/offices/{officeId}', [CompanyProfilesController::class, 'deleteOffice'])
        ->where(['profileId' => '[0-9]+', 'officeId' => '[0-9]+'])
        ->middleware('auth.admin.permission:accounts.manage');
    Route::get('company-profiles/{profileId}/job-offers', [CompanyProfilesController::class, 'getJobOffers'])
        ->where('profileId', '[0-9]+')
        ->middleware('auth.admin.permission:accounts.manage');
    Route::post('company-profiles/{profileId}/job-offers', [CompanyProfilesController::class, 'createJobOffer'])
        ->where('profileId', '[0-9]+')
        ->middleware('auth.admin.permission:accounts.manage');
    Route::put('company-profiles/{profileId}/job-offers/{jobOfferId}', [CompanyProfilesController::class, 'updateJobOffer'])
        ->where(['profileId' => '[0-9]+', 'jobOfferId' => '[0-9]+'])
        ->middleware('auth.admin.permission:accounts.manage');
    Route::delete('company-profiles/{profileId}/job-offers/{jobOfferId}', [CompanyProfilesController::class, 'deleteJobOffer'])
        ->where(['profileId' => '[0-9]+', 'jobOfferId' => '[0-9]+'])
        ->middleware('auth.admin.permission:accounts.manage');
    Route::get('company-profiles/{profileId}/projects', [CompanyProfilesController::class, 'getProjects'])
        ->where('profileId', '[0-9]+')
        ->middleware('auth.admin.permission:accounts.manage');
    Route::post('company-profiles/{profileId}/projects', [CompanyProfilesController::class, 'createProject'])
        ->where('profileId', '[0-9]+')
        ->middleware('auth.admin.permission:accounts.manage');
    Route::post('company-profiles/{profileId}/projects/{projectId}', [CompanyProfilesController::class, 'updateProject'])
        ->where(['profileId' => '[0-9]+', 'projectId' => '[0-9]+'])
        ->middleware('auth.admin.permission:accounts.manage');
    Route::delete('company-profiles/{profileId}/projects/{projectId}', [CompanyProfilesController::class, 'deleteProject'])
        ->where(['profileId' => '[0-9]+', 'projectId' => '[0-9]+'])
        ->middleware('auth.admin.permission:accounts.manage');
    Route::get('company-profiles/by-account/{accountId}', [CompanyProfilesController::class, 'getCompanyProfileByAccount'])
        ->where('accountId', '[0-9]+')
        ->middleware('auth.admin.permission:accounts.manage');

    Route::middleware('auth.admin.permission:cms.manage')->group(function () {
        Route::get('media/folders', [MediaManagerController::class, 'listFolders']);
        Route::get('media/folder', [MediaManagerController::class, 'getFolder']);
        Route::post('media/folders', [MediaManagerController::class, 'createFolder']);
        Route::post('media/folders/{id}/rename', [MediaManagerController::class, 'renameFolder'])->where('id', '[0-9]+');
        Route::delete('media/folders/{id}', [MediaManagerController::class, 'deleteFolder'])->where('id', '[0-9]+');
        Route::post('media/move', [MediaManagerController::class, 'moveItems']);
    });

    Route::post('media/upload/{uploadType?}', [MediaManagerController::class, 'postUpload'])
        ->middleware('auth.admin.permission:cms.manage');
    Route::get('media/{mediaId}', [MediaManagerController::class, 'getMedia'])->where('mediaId', '[0-9]+');
    Route::post('media/{mediaId}', [MediaManagerController::class, 'postMedia'])->where('mediaId', '[0-9]+');
    Route::delete('media/{mediaId}', [MediaManagerController::class, 'postDelete'])->where('mediaId', '[0-9]+')
        ->middleware('auth.admin.permission:cms.manage');
    Route::post('media/{mediaId}/crop', [MediaManagerController::class, 'postCrop'])->where('mediaId', '[0-9]+')
        ->middleware('auth.admin.permission:cms.manage');
    Route::get('media', [MediaManagerController::class, 'getList']);

    Route::get('content/list/{type}', [ContentController::class, 'getList'])
        ->middleware('auth.admin.permission:cms.manage');
    Route::post('content/list/{type}', [ContentController::class, 'postList'])
        ->middleware('auth.admin.permission:cms.manage');
    Route::get('content/form/{type}/{id?}/{parentId?}/{parentContentType?}/{parentFieldName?}', [ContentController::class, 'getForm'])
        ->where(['id'=> '[0-9]+', 'parentId' => '[0-9]+'])
        ->middleware('auth.admin.permission:cms.manage');
    Route::post('content/users/auto-complete', [UsersController::class, 'postUsersAutoComplete'])
        ->middleware('auth.admin.permission:cms.manage');
    Route::post('content/accounts/auto-complete', [AccountsController::class, 'postAccountsAutoComplete'])
        ->middleware('auth.admin.permission:cms.manage');
    Route::post('content/company-profiles/auto-complete', [CompanyProfilesController::class, 'postCompanyProfileAutoComplete'])
        ->middleware('auth.admin.permission:cms.manage');
    Route::get('content/preview/{type}/{id?}/{parentId?}/{parentContentType?}/{parentFieldName?}', [ContentController::class, 'getPreview'])
        ->where(['id'=> '[0-9]+', 'parentId' => '[0-9]+'])
        ->middleware('auth.admin.permission:cms.manage');
    Route::post('content/form/{type}/{id?}/{parentId?}/{parentContentType?}/{parentFieldName?}', [ContentController::class, 'postForm'])
        ->where(['id'=> '[0-9]+', 'parentId' => '[0-9]+'])
        ->middleware('auth.admin.permission:cms.manage');
    Route::post('content/check-slug', [ContentController::class, 'postCheckSlug'])
        ->middleware('auth.admin.permission:cms.manage');
    Route::post('content/auto-complete/{type?}/{field?}', [ContentController::class, 'postAutoComplete'])
        ->middleware('auth.admin.permission:cms.manage');
    Route::post('content/auto-complete-model/{type}', [ContentController::class, 'postAutoCompleteModel'])
        ->middleware('auth.admin.permission:cms.manage');
    Route::delete('content/{type}/{id}', [ContentController::class, 'deleteContentType'])
        ->where(['id'=> '[0-9]+'])
        ->middleware('auth.admin.permission:cms.manage');
    Route::post('content/bulk/{type}', [ContentController::class, 'postBulk'])
        ->middleware('auth.admin.permission:cms.manage');
    Route::get('content/order/{type}', [ContentController::class, 'getOrder'])
        ->middleware('auth.admin.permission:cms.manage');
    Route::post('content/order/{type}', [ContentController::class, 'postOrder'])
        ->middleware('auth.admin.permission:cms.manage');
    Route::get('content/form-template/{type}/{parentId}', [ContentController::class, 'getFormTemplate'])
        ->where(['parentId'=> '[0-9]+'])
        ->middleware('auth.admin.permission:cms.manage');

    Route::get('menu/edit/{menuId}', [MenuController::class, 'getEdit'])
        ->where(['menuId'=> '[0-9]+'])
        ->middleware('auth.admin.permission:cms.manage');
    Route::post('menu/edit/{menuId}', [MenuController::class, 'postEdit'])
        ->where(['menuId'=> '[0-9]+'])
        ->middleware('auth.admin.permission:cms.manage');

    Route::get('/', [DashboardController::class, 'getIndex']);
    Route::get('/media-manager', [MediaManagerController::class, 'getIndex']);

    Route::get('/object-titles/{objectId}', [ContentController::class, 'getObjectTitles'])
        ->where(['objectId' => '[0-9]+'])
        ->middleware('auth.admin.permission:cms.manage');
});

