<?php

use App\Http\Controllers\Admin\Auth\ForgotPasswordController;
use App\Http\Controllers\Admin\Auth\LoginController;
use App\Http\Controllers\Admin\Auth\ResetPasswordController;
use App\Http\Controllers\Admin\ContentController;
use App\Http\Controllers\Admin\HomeController;
use App\Http\Controllers\Admin\LanguageController;
use App\Http\Controllers\Admin\MediaManagerController;
use App\Http\Controllers\Admin\MenuController;
use App\Http\Controllers\Admin\TrashController;
use App\Http\Controllers\Admin\UserController;
use App\Http\Controllers\Frontend\GenericController;
use App\Http\Controllers\Frontend\ImageThumbController;
use App\Libs\Facades\Localization;
use Illuminate\Support\Facades\Route;

/*
|--------------------------------------------------------------------------
| 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::controller('/admin/login', 'AdminLoginController');

Route::get('/admin/login', [LoginController::class, 'showLoginForm'])->name('admin.login');
Route::get('/admin/login-eae', [LoginController::class, 'showPasswordLoginForm'])->name('admin.login-password');
Route::post('/admin/login', [LoginController::class, 'login']);
Route::post('/admin/google-login', [LoginController::class, 'googlelogin']);
Route::post('/admin/logout', [LoginController::class, 'logout'])->name('admin.logout');
Route::get('/admin/password/reset', [ForgotPasswordController::class, 'showLinkRequestForm'])
    ->name('admin.password.request');
Route::post('/admin/password/email', [ForgotPasswordController::class, 'sendResetLinkEmail'])
    ->name('admin.password.email');
Route::get('/admin/password/reset/{token}', [ResetPasswordController::class, 'showResetForm'])
    ->name('admin.password.reset');
Route::post('/admin/password/reset', [ResetPasswordController::class, 'reset'])->name('admin.password.update');

Route::prefix('admin')->middleware('auth:admin', 'admin.website')->group(function () {

    Route::get('admin-users', [UserController::class, 'getIndex'])
        ->middleware('auth.admin.role:Administrator');
    Route::post('admin-users/list', [UserController::class, 'postList'])
        ->middleware('auth.admin.role:Administrator');
    Route::get('admin-users/edit/{userId?}', [UserController::class, 'getEdit'])
        ->where('userId', '[0-9]+');
    Route::post('admin-users/insert', [UserController::class, 'postInsert'])
        ->middleware('auth.admin.role:Administrator');
    Route::post('admin-users/edit/{userId}', [UserController::class, 'postEdit'])
        ->where('userId', '[0-9]+');
    Route::post('admin-users/delete', [UserController::class, 'postDelete']);
    Route::get('admin-users/export', [UserController::class, 'getExportUsers'])
        ->middleware('auth.admin.role:Administrator');

    Route::get('media/more', [MediaManagerController::class, 'getMore'])
        ->middleware('auth.admin.role:Administrator|User|HR|Editor|Blog Editor|Projects Editor');
    Route::post('media/upload/{uploadType?}', [MediaManagerController::class, 'postUpload'])
        ->middleware('auth.admin.role:Administrator|User|HR|Editor|Blog Editor|Projects Editor');
    Route::get('media/{mediaId}', [MediaManagerController::class, 'getMedia'])->where('mediaId', '[0-9]+')
        ->middleware('auth.admin.role:Administrator|User|HR|Editor|Blog Editor|Projects Editor');
    Route::post('media/{mediaId}', [MediaManagerController::class, 'postMedia'])->where('mediaId', '[0-9]+')
        ->middleware('auth.admin.role:Administrator|User|HR|Editor|Blog Editor|Projects Editor');
    Route::delete('media/{mediaId}', [MediaManagerController::class, 'postDelete'])->where('mediaId', '[0-9]+')
        ->middleware('auth.admin.role:Administrator|User|HR|Editor|Blog Editor|Projects Editor');
    Route::get('media/update-image-sizes', [MediaManagerController::class, 'getUpdateImageSizes'])
        ->middleware('auth.admin.role:Administrator|User|HR|Editor|Blog Editor|Projects Editor');
    Route::get('media', [MediaManagerController::class, 'getList'])
        ->middleware('auth.admin.role:Administrator|User|HR|Editor|Blog Editor|Projects Editor');
    Route::post('content/auto-complete-old/{type}/{field}', [ContentController::class, 'postAutoCompleteOld'])
        ->middleware('auth.admin.role:Administrator|User|HR|Editor|Blog Editor|Projects Editor');
    Route::post('content/auto-complete/{type?}/{field?}', [ContentController::class, 'postAutoComplete'])
        ->middleware('auth.admin.role:Administrator|User|HR|Editor|Blog Editor|Projects Editor');
    Route::post('content/export-pages', [ContentController::class, 'postExportPages'])
        ->middleware('auth.admin.role:Administrator|Developer|Editor');
    Route::post('content/export-blocks', [ContentController::class, 'postExportBlocks'])
        ->middleware('auth.admin.role:Administrator|Developer|Editor');
    Route::post('content/share-link/{websiteObjectId}', [ContentController::class, 'postShareLink'])
        ->middleware('auth.admin.role:Administrator|Developer|Editor');
    Route::get('trash', [TrashController::class, 'view'])
        ->middleware('auth.admin.role:Administrator|Developer|Editor');
    Route::post('trash/list', [TrashController::class, 'list'])
        ->middleware('auth.admin.role:Administrator|Developer|Editor');
    Route::post('trash/restore/{websiteObjectId}', [TrashController::class, 'restore'])
        ->where(['websiteObjectId'=> '[0-9]+'])
        ->middleware('auth.admin.role:Administrator|Developer|Editor');
    Route::post('trash/delete/{websiteObjectId}', [TrashController::class, 'delete'])
        ->where(['websiteObjectId'=> '[0-9]+'])
        ->middleware('auth.admin.role:Administrator|Developer|Editor');

    Route::get('menu/edit/{menuId}', [MenuController::class, 'getEdit'])
        ->where(['menuId'=> '[0-9]+'])
        ->middleware('auth.admin.role:Administrator|Developer|Editor');
    Route::post('menu/edit/{menuId}', [MenuController::class, 'postEdit'])
        ->where(['menuId'=> '[0-9]+'])
        ->middleware('auth.admin.role:Administrator|Developer|Editor');
    Route::post('menu/create-menu-item', [MenuController::class, 'postCreateMenuItem'])
        ->middleware('auth.admin.role:Administrator|Developer|Editor');

    Route::get('content/index/{type}', [ContentController::class, 'getIndex']);
    Route::post('content/list/{type}', [ContentController::class, 'postList']);
    Route::get(
        'content/form/{type}/{id?}/{parentId?}/{parentContentType?}/{parentFieldName?}',
        [ContentController::class, 'getForm'])
        ->where(['id' => '[0-9]+', 'parentId' => '[0-9]+']);
    Route::post(
        'content/form/{type}/{id?}/{parentId?}/{parentContentType?}/{parentFieldName?}',
        [ContentController::class, 'postForm'])
        ->where(['id' => '[0-9]+', 'parentId' => '[0-9]+']);
    Route::post(
        'content/duplicate/{type}/{id}',
        [ContentController::class, 'postDuplicate'])
        ->where(['id' => '[0-9]+']);
    Route::post('content/check-slug', [ContentController::class, 'postCheckSlug']);
    Route::get('content/order/{type}', [ContentController::class, 'getOrder']);
    Route::post('content/order/{type}', [ContentController::class, 'postOrder']);
    Route::get(
        'content/form-template/{type}/{parentId}',
        [ContentController::class, 'getFormTemplate'])
        ->where(['parentId' => '[0-9]+']);
    Route::get(
        'content/type-info/{type}/{contentId}',
        [ContentController::class, 'getTypeInfo'])
        ->where(['contentId' => '[0-9]+']);
    Route::get('content/index/{type}', [ContentController::class, 'getIndex']);

    Route::get('content/update-uris/{type}', [ContentController::class, 'getUpdateUris']);
    Route::delete('content', [ContentController::class, 'deleteIndex']);

    Route::get('content/browsers/{browser}', [ContentController::class, 'getBrowser']);
    Route::get('/maintenance', [HomeController::class, 'getMaintenance'])
        ->middleware('auth.admin.role:Administrator');
    Route::get('/languages-manager', [LanguageController::class, 'getLanguagesManager'])
        ->middleware('auth.admin.role:Administrator');
    Route::get('/languages-manager/edit/{languageId?}', [LanguageController::class, 'getEdit'])
        ->where('languageId', '[a-zA-Z_\-]+')
        ->middleware('auth.admin.role:Administrator');
    Route::post('/languages-manager/edit/{languageId?}', [LanguageController::class, 'postEdit'])
        ->where('languageId', '[a-zA-Z_\-]+')
        ->middleware('auth.admin.role:Administrator');
    Route::post('/languages-manager/delete/{languageId?}', [LanguageController::class, 'postDelete'])
        ->where('languageId', '[a-zA-Z_\-]+')
        ->middleware('auth.admin.role:Administrator');
    Route::get('/languages-manager/edit-static-translations/{languageId}', [LanguageController::class, 'getEditTranslations'])
        ->where('languageId', '[a-zA-Z_\-]+')
        ->middleware('auth.admin.role:Administrator');
    Route::post('/languages-manager/edit-static-translations', [LanguageController::class, 'postSaveTranslation'])
        ->middleware('auth.admin.role:Administrator');
    Route::get('/languages-manager/export-translations-csv/{languageId}', [LanguageController::class, 'getExportStaticTranslationsCsv'])
        ->middleware('auth.admin.role:Administrator|Developer|Editor');
    Route::post('/languages-manager/import-translations-csv/{languageId}', [LanguageController::class, 'postImportStaticTranslationsCsv'])
        ->middleware('auth.admin.role:Administrator|Developer|Editor');
    Route::get('/projects-api', [HomeController::class, 'getProjectsApi'])
        ->middleware('auth.admin.role:Administrator|Projects Editor|Editor');
    Route::post('/rebuild-sitemap', [HomeController::class, 'postRebuildSitemap'])
        ->middleware('auth.admin.role:Administrator');
    Route::post('/clear-cache', [HomeController::class, 'postClearCache'])
        ->middleware('auth.admin.role:Administrator');
    Route::post('/rebuild-search', [HomeController::class, 'postRebuildSearch'])
        ->middleware('auth.admin.role:Administrator');
    Route::post('/sync-projects', [HomeController::class, 'postSyncProjects'])
        ->middleware('auth.admin.role:Administrator|Projects Editor|Editor');
    Route::post('/sync-project', [HomeController::class, 'postSyncProject'])
        ->middleware('auth.admin.role:Administrator|Projects Editor|Editor');

    Route::get('/', [HomeController::class, 'getIndex'])
        ->middleware('auth.admin.role:Administrator|Developer|Editor|Read Only|Projects Editor|Blog Editor');
});

Route::get('uploads/thumbs/{filename}', [ImageThumbController::class, 'getThumb'])
    ->where(['filename'=>'.*\.(gif|jpg|png|jpeg|webp)']);

Route::group(
    [
        'prefix' => Localization::getRoutePrefix(),
        'middleware' => ['frontend.localization']
    ],
    function () {
        Route::get('/sitemap.xml', [GenericController::class, 'sitemap']);
        Route::get('/robots.txt', [GenericController::class, 'robots']);

        Route::get('{uriPath?}', [GenericController::class, 'getIndex'])
            ->middleware('page-cache')
            ->where(['uriPath'=> '(.*)']);
    }
);

/*
Route::get('/', function () {
    return view('welcome');
});*/
