<?php

/*
|--------------------------------------------------------------------------
| 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!
|
*/

use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Route;
use Mcamara\LaravelLocalization\Facades\LaravelLocalization;

Auth::routes();

Route::get('/two-factor', 'Auth\LoginController@showTwoFactorForm')->name('two_factor.form');
Route::post('/two-factor', 'Auth\LoginController@verifyTwoFactor')->name('two_factor.verify');

Route::get('/admin/login', 'Admin\Auth\LoginController@showLoginForm')->name('admin.login');
Route::post('/admin/login', 'Admin\Auth\LoginController@login');
Route::post('/admin/logout', 'Admin\Auth\LoginController@logout')->name('admin.logout');
Route::get('/admin/two-factor', 'Admin\Auth\LoginController@showTwoFactorForm')->name('admin.two_factor.form');
Route::post('/admin/two-factor', 'Admin\Auth\LoginController@verifyTwoFactor')->name('admin.two_factor.verify');
Route::get('/admin/password/reset', 'Admin\Auth\ForgotPasswordController@showLinkRequestForm')->name('admin.password.request');
Route::post('/admin/password/email', 'Admin\Auth\ForgotPasswordController@sendResetLinkEmail')->name('admin.password.email');
Route::get('/admin/password/reset/{token}', 'Admin\Auth\ResetPasswordController@showResetForm')->name('admin.password.reset');
Route::post('/admin/password/reset', 'Admin\Auth\ResetPasswordController@reset')->name('admin.password.update');

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

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

    Route::get('admin-members', 'Admin\MemberController@getIndex');
    Route::post('admin-members/list', 'Admin\MemberController@postList');
    Route::get('admin-members/edit/{memberId?}', 'Admin\MemberController@getEdit')->where('memberId', '[0-9]+');
    Route::post('admin-members/edit/{memberId?}', 'Admin\MemberController@postEdit')->where('memberId', '[0-9]+');
    Route::post('admin-members/delete', 'Admin\MemberController@postDelete');
    Route::get('admin-members/export', 'Admin\MemberController@getExportMembers');

    Route::get('users-frontend', 'Admin\UserFrontendController@getIndex');
    Route::post('users-frontend/list', 'Admin\UserFrontendController@postList');
    Route::get('users-frontend/edit/{userId}', 'Admin\UserFrontendController@getEdit')->where('userId', '[0-9]+');
    Route::post('users-frontend/edit/{userId}', 'Admin\UserFrontendController@postEdit')->where('userId', '[0-9]+');
    Route::post('users-frontend/delete', 'Admin\UserFrontendController@postDelete');
    Route::post('users-frontend/resend', 'Admin\UserFrontendController@postResend');
    Route::get('users-frontend/export', 'Admin\UserFrontendController@getExportUsers');

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

    // Smart Sync Test Routes
    // Route::get('smart-sync/trigger', 'Admin\SmartSyncTestController@triggerSync')->name('admin.smart-sync.trigger');
    // Route::get('smart-sync/status', 'Admin\SmartSyncTestController@showStatus')->name('admin.smart-sync.status');

    // Traditional Sync Routes (Full Microsoft Graph Sync)
    // Route::get('msgraph-sync/trigger', 'Admin\SmartSyncTestController@triggerTraditionalSync')->name('admin.msgraph-sync.trigger');
    // Route::post('msgraph-sync/execute', 'Admin\SmartSyncTestController@executeTraditionalSync')->name('admin.msgraph-sync.execute');

    Route::get('content/index/{type}', 'Admin\ContentController@getIndex')
        ->middleware('auth.admin.permission:cms.manage');
    Route::post('content/list/{type}', 'Admin\ContentController@postList')
        ->middleware('auth.admin.permission:cms.manage');
    Route::get('content/form/{type}/{id?}/{parentId?}/{parentContentType?}/{parentFieldName?}', 'Admin\ContentController@getForm')
        ->where(['id'=> '[0-9]+', 'parentId' => '[0-9]+'])
        ->middleware('auth.admin.permission:cms.manage');
    Route::get('content/preview/{type}/{id?}/{parentId?}/{parentContentType?}/{parentFieldName?}', 'Admin\ContentController@getPreview')
        ->where(['id'=> '[0-9]+', 'parentId' => '[0-9]+'])
        ->middleware('auth.admin.permission:cms.manage');
    Route::post('content/form/{type}/{id?}/{parentId?}/{parentContentType?}/{parentFieldName?}', 'Admin\ContentController@postForm')
        ->where(['id'=> '[0-9]+', 'parentId' => '[0-9]+'])
        ->middleware('auth.admin.permission:cms.manage');
    Route::post('content/check-slug', 'Admin\ContentController@postCheckSlug')
        ->middleware('auth.admin.permission:cms.manage');
    Route::post('content/auto-complete/{type}', 'Admin\ContentController@postAutoComplete')
        ->middleware('auth.admin.permission:cms.manage');
    Route::delete('content/{type}/{id}', 'Admin\ContentController@deleteContentType')
        ->where(['id'=> '[0-9]+'])
        ->middleware('auth.admin.permission:cms.manage');
    Route::get('content/order/{type}', 'Admin\ContentController@getOrder')
        ->middleware('auth.admin.permission:cms.manage');
    Route::post('content/order/{type}', 'Admin\ContentController@postOrder')
        ->middleware('auth.admin.permission:cms.manage');
    Route::get('content/form-template/{type}/{parentId}', 'Admin\ContentController@getFormTemplate')
        ->where(['parentId'=> '[0-9]+'])
        ->middleware('auth.admin.permission:cms.manage');
    Route::delete('content/clear-users/{type}/{id}', 'Admin\ContentController@deleteClearUsersContentType')
        ->where(['id'=> '[0-9]+'])
        ->middleware('auth.admin.permission:cms.manage');

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

    Route::get('octoparse', 'Admin\OctoparseController@getIndex')
        ->name('admin.octoparse.index')
        ->middleware('auth.admin.permission:octoparse.view');
    Route::get('octoparse/logs', 'Admin\OctoparseController@getLogs')
        ->name('admin.octoparse.logs')
        ->middleware('auth.admin.permission:octoparse.view');
    Route::get('octoparse/logs/{logId}/new-entries', 'Admin\OctoparseController@getLogNewEntries')
        ->name('admin.octoparse.log.new-entries')
        ->where('logId', '[0-9]+')
        ->middleware('auth.admin.permission:octoparse.view');
    Route::get('octoparse/tasks/{taskId}', 'Admin\OctoparseController@getTask')
        ->name('admin.octoparse.task')
        ->middleware('auth.admin.permission:octoparse.view');
    Route::post('octoparse/run/{taskId?}', 'Admin\OctoparseController@postRun')
        ->name('admin.octoparse.run')
        ->middleware('auth.admin.permission:octoparse.run');

    Route::get('/', 'Admin\HomeController@getIndex');
});

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

// Home route for authenticated users - redirect to frontend
Route::get('/home', function () {
    return redirect(env('APP_FRONTEND_URL', 'https://efet-intranet-nc-frontend-en.eae.pt'));
})->middleware('auth');

// OAuth/OpenID Connect endpoints for Nextcloud integration
Route::get('oauth/userinfo', 'Api\OAuthController@userInfo')->middleware(['auth:api'])->name('openid.userinfo');
Route::get('oauth/logout', 'Api\OAuthController@logout')->name('openid.logout');
Route::get('/.well-known/openid-configuration', 'Api\CustomDiscoveryController')->name('openid.discovery');

Route::get('/', function () {
    return redirect('/admin/login');
});
