<?php

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\DoctorsController;
use App\Http\Controllers\Backoffice\MediaManagerController;
use App\Http\Controllers\Backoffice\MenuController;
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('doctors', [DoctorsController::class, 'getIndex']);
    Route::post('doctors/list', [DoctorsController::class, 'postList']);
    Route::get('doctors/edit/{doctorId?}', [DoctorsController::class, 'getEdit'])->where('doctorId', '[0-9]+');
    Route::post('doctors/edit/{doctorId?}', [DoctorsController::class, 'postEdit'])->where('doctorId', '[0-9]+');
    Route::delete('doctors/delete/{doctorId}', [DoctorsController::class, 'postDelete'])->where('doctorId', '[0-9]+');

    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/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::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::delete('content/{type}/{id}', [ContentController::class, 'deleteContentType'])
        ->where(['id'=> '[0-9]+'])
        ->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');
});
