<?php

use App\Http\Controllers\Admin\AboutMeSectionController;
use App\Http\Controllers\Admin\CategoryController;
use App\Http\Controllers\Admin\CreationController;
use App\Http\Controllers\Admin\EventController;
use App\Http\Controllers\Admin\HomeController;
use App\Http\Controllers\Admin\LegalMentionController;
use App\Http\Controllers\Admin\PrestationController;
use App\Http\Controllers\Admin\SettingsController;
use App\Http\Controllers\Admin\SocialMediaLinksController;
use App\Http\Controllers\Admin\TermsSectionController;
use App\Http\Controllers\Public\IndexController;
use App\Http\Controllers\Public\LegalMentionsController;
use App\Http\Controllers\Public\PortfolioController;
use App\Http\Controllers\Public\PrestationController as PublicPrestationController;
use App\Http\Controllers\Public\TermsController;
use App\Http\Middleware\CheckPrivateModeMiddleware;
use App\Http\Middleware\RedirectIfUserExistsMiddleware;
use Illuminate\Support\Facades\Route;
use Laravel\Fortify\Features;
use Laravel\Fortify\Http\Controllers\RegisteredUserController;

Route::middleware(CheckPrivateModeMiddleware::class)->group(function () {
    Route::get('/', IndexController::class)
        ->name('index');

    Route::view('/prestations', 'public.prestations')->name('prestations');
    Route::view('/evenements', 'public.evenements')->name('evenements');
    Route::get('/portfolio', [PortfolioController::class, 'index'])->name('portfolio');
    Route::get('/portfolio/api', [PortfolioController::class, 'api'])->name('portfolio.api');
    Route::get('/portfolio/{slug}', [PortfolioController::class, 'show'])->name('portfolio.show');
    Route::get('/prestations/{slug}', [PublicPrestationController::class, 'index'])->name('prestations.show');
    Route::get('/mentions-legales', LegalMentionsController::class)->name('legal-mentions');
    Route::get('/conditions-generales-de-vente', TermsController::class)->name('terms');

    Route::view('/maintenance', 'public.maintenance')->name('maintenance');
});

if (Features::enabled(Features::registration())) {
    Route::get('/register', [RegisteredUserController::class, 'create'])
        ->middleware([RedirectIfUserExistsMiddleware::class])
        ->name('register');
}

// Group for /admin routes
Route::prefix('admin')->middleware('auth')->name('admin.')->group(function () {
    Route::get('/', [HomeController::class, 'index'])
        ->name('home');

    Route::prefix('categories')->name('categories.')->group(function () {
        Route::get('/', [CategoryController::class, 'index'])
            ->name('index');
        Route::get('/create', [CategoryController::class, 'createPage'])
            ->name('create');
        Route::post('/', [CategoryController::class, 'store'])
            ->name('store');
        Route::get('/{category}/edit', [CategoryController::class, 'editPage'])
            ->name('edit');
        Route::put('/{category}', [CategoryController::class, 'update'])
            ->name('update');
        Route::get('/{category}/delete', [CategoryController::class, 'delete'])
            ->name('delete');
    });

    Route::prefix('creations')->name('creations.')->group(function () {
        Route::get('/', [CreationController::class, 'listPage'])
            ->name('index');
        Route::get('/create', [CreationController::class, 'createPage'])
            ->name('create');
        Route::post('/', [CreationController::class, 'store'])
            ->name('store');
        Route::get('/{creation}/edit', [CreationController::class, 'editPage'])
            ->name('edit');
        Route::put('/{creation}', [CreationController::class, 'update'])
            ->name('update');
        Route::match(['GET', 'DELETE'], '/{creation}/delete', [CreationController::class, 'delete'])
            ->name('delete');
        Route::delete('/{creation}/remove-addtionnal-image/{image}', [CreationController::class, 'removeAdditionalImage'])
            ->name('remove-additionnal-image');
    });

    Route::prefix('social-media-links')->name('social-media-links.')->group(function () {
        Route::get('/', [SocialMediaLinksController::class, 'listPage'])
            ->name('index');
        Route::get('/create', [SocialMediaLinksController::class, 'createPage'])
            ->name('create');
        Route::post('/', [SocialMediaLinksController::class, 'store'])
            ->name('store');
        Route::get('/{socialMediaLink}/edit', [SocialMediaLinksController::class, 'editPage'])
            ->name('edit');
        Route::put('/{socialMediaLink}', [SocialMediaLinksController::class, 'update'])
            ->name('update');
        Route::get('/{socialMediaLink}/delete', [SocialMediaLinksController::class, 'delete'])
            ->name('delete');
    });

    Route::prefix('about')->name('about.')->group(function () {
        Route::get('/', [AboutMeSectionController::class, 'index'])->name('index');
        Route::get('/create', [AboutMeSectionController::class, 'createPage'])->name('create');
        Route::post('/', [AboutMeSectionController::class, 'store'])->name('store');
        Route::get('/{section}/edit', [AboutMeSectionController::class, 'editPage'])->name('edit');
        Route::put('/{section}', [AboutMeSectionController::class, 'update'])->name('update');
        Route::get('/{section}/delete', [AboutMeSectionController::class, 'delete'])->name('delete');
    });

    Route::prefix('settings')->name('settings.')->group(function () {
        Route::get('/users', [SettingsController::class, 'userListPage'])->name('users');
        Route::post('/users', [SettingsController::class, 'createUser'])->name('create-user');
        Route::match(['GET', 'DELETE'], '/users/{id}/delete', [SettingsController::class, 'deleteUser'])->name('delete-user');
        Route::get('/general', [SettingsController::class, 'generalPage'])->name('general');
        Route::put('/general', [SettingsController::class, 'updateUserInfos'])->name('update-user-infos');
    });

    Route::prefix('prestations')->name('prestations.')->group(function () {
        Route::get('/', [PrestationController::class, 'index'])->name('index');
        Route::get('/create', [PrestationController::class, 'createPage'])->name('create');
        Route::post('/', [PrestationController::class, 'store'])->name('store');
        Route::get('/{prestation}/edit', [PrestationController::class, 'editPage'])->name('edit');
        Route::put('/{prestation}', [PrestationController::class, 'update'])->name('update');
        Route::match(['GET', 'DELETE'], '/{prestation}/delete', [PrestationController::class, 'delete'])->name('delete');
    });

    Route::prefix('events')->name('events.')->group(function () {
        Route::get('/', [EventController::class, 'index'])->name('index');
        Route::get('/create', [EventController::class, 'createPage'])->name('create');
        Route::post('/', [EventController::class, 'store'])->name('store');
        Route::get('/{event}/edit', [EventController::class, 'editPage'])->name('edit');
        Route::put('/{event}', [EventController::class, 'update'])->name('update');
        Route::get('/{event}/delete', [EventController::class, 'delete'])->name('delete');
    });

    Route::prefix('terms')->name('terms.')->group(function () {
        Route::get('/', [TermsSectionController::class, 'index'])->name('index');
        Route::get('/create', [TermsSectionController::class, 'createPage'])->name('create');
        Route::post('/', [TermsSectionController::class, 'store'])->name('store');
        Route::get('/{section}/edit', [TermsSectionController::class, 'editPage'])->name('edit');
        Route::put('/{section}', [TermsSectionController::class, 'update'])->name('update');
        Route::get('/{section}/delete', [TermsSectionController::class, 'delete'])->name('delete');
    });

    Route::prefix('legal-mentions')->name('legal_mentions.')->group(function () {
        Route::get('/', [LegalMentionController::class, 'index'])->name('index');
        Route::get('/create', [LegalMentionController::class, 'createPage'])->name('create');
        Route::post('/', [LegalMentionController::class, 'store'])->name('store');
        Route::get('/{id}/edit', [LegalMentionController::class, 'editPage'])->name('edit');
        Route::put('/{id}', [LegalMentionController::class, 'update'])->name('update');
        Route::get('/{id}/delete', [LegalMentionController::class, 'delete'])->name('delete');
    });
});

Route::get('/logout', function () {
    auth()->logout();

    return redirect()->route('index');
})->name('logout');