<?php

use App\Http\Controllers\Frontend\AccountsController;
use App\Http\Controllers\Frontend\ArchivesController;
use App\Http\Controllers\Frontend\CompetitionsController;
use App\Http\Controllers\Frontend\MagazineController;
use App\Http\Controllers\Frontend\ProfilesController;
use App\Http\Controllers\Frontend\FiltersController;
use App\Http\Controllers\Frontend\CvEntriesController;
use App\Http\Controllers\Frontend\GlobalController;
use App\Http\Controllers\Frontend\JobOffersController;
use App\Http\Controllers\Frontend\LocalizationController;
use App\Http\Controllers\Frontend\NewsletterSubscriptionsController;
use App\Http\Controllers\Frontend\OfficeController;
use App\Http\Controllers\Frontend\ResultsController;
use App\Http\Controllers\Frontend\SubscriptionsController;
use App\Http\Controllers\Frontend\UsersController;
use App\Http\Controllers\Frontend\WatchlistsController;
use App\Http\Controllers\Frontend\ProjectController;
use App\Http\Middleware\TestAuthUser;
use App\Http\Controllers\Frontend\SearchProfileController;
use App\Http\Controllers\Frontend\PagesController;
use Illuminate\Support\Facades\Route;
use Mcamara\LaravelLocalization\Facades\LaravelLocalization;

// Route::post('email/verify/{id}/{hash}', [UsersController::class, 'verify'])->name('verification.verify');
// Route::get('email/resend/{id}', [UsersController::class, 'resend'])->name('verification.resend');
Route::group(
    [
        'prefix' => LaravelLocalization::setLocale(request()->segment(2))
    ],
    function () {
        Route::post('register', [UsersController::class, 'create']);
        Route::post('login', [UsersController::class, 'login']);
        Route::post('forgot-password', [UsersController::class, 'forgotPassword']);
        Route::post('reset-password', [UsersController::class, 'resetPassword'])->name('password.reset');
        Route::post('resend-code', [UsersController::class, 'resendCode']);
        Route::post('check-code', [UsersController::class, 'checkCode']);
        Route::post('newsletter/subscribe', [NewsletterSubscriptionsController::class, 'subscribe']);

        Route::get('subscription-plan-options/{planOptionId}', [SubscriptionsController::class, 'getSubscriptionPlanOption']);
        Route::get('subscription-basic-plan', [SubscriptionsController::class, 'getBasicPlan']);

        Route::post('check-invitation/{token}', [AccountsController::class, 'checkInvitation']);

        Route::middleware(['auth:sanctum'])->group(function () {
        // Route::middleware([TestAuthUser::class])->group(function () {
            Route::post('logout', [UsersController::class, 'logout']);

            // Account subscription flow
            Route::get('user', [UsersController::class, 'getUser']);
            Route::post('refresh-token', [UsersController::class, 'getToken']);
            Route::put('user', [UsersController::class, 'update']);
            Route::post('account', [AccountsController::class, 'create']);
            Route::put('account', [AccountsController::class, 'updateAccountRegister']);
            Route::post('account/billing-address', [AccountsController::class, 'createBillingAddress']);
            Route::put('user/profile', [UsersController::class, 'updateProfile']);
            Route::put('user/profile/full', [UsersController::class, 'updateFullProfile']);
            Route::post('subscriptions', [SubscriptionsController::class, 'create']);
            Route::post('subscriptions/contact', [SubscriptionsController::class, 'contactSubscription']);

            // Account Profile
            Route::post('account/profile/company-image', [AccountsController::class, 'uploadCompanyImage']);
            Route::post('account/profile', [AccountsController::class, 'updateAccount']);
            Route::put('account/profile/socials', [AccountsController::class, 'updateAccountSocials']);
            Route::get('account/result-winners', [AccountsController::class, 'getAccountResultWinners']);
            Route::get('account/result-entities', [AccountsController::class, 'getAccountResultEntities']);
            route::put('account/address', [AccountsController::class, 'updateAccountAddress']);

            // Members
            Route::post('account/members', [AccountsController::class, 'inviteMember']);
            Route::delete('account/members/{memberId}', [AccountsController::class, 'deleteMember']);
            Route::put('account/members/{memberId}', [AccountsController::class, 'updateMember']);
            Route::post('account/accept-invitation/{token}', [AccountsController::class, 'acceptInvitation']);
            Route::get('account/members', [AccountsController::class, 'getMembers']);

            // Invoices
            Route::get('account/invoices', [AccountsController::class, 'getInvoices']);
            Route::get('account/invoices/{id}/download', [AccountsController::class, 'downloadInvoice']);

            // Offices
            Route::get('account/offices', [OfficeController::class, 'getOffices']);
            Route::post('account/offices', [OfficeController::class, 'createOffice']);
            Route::put('account/offices/{id}', [OfficeController::class, 'updateOffice']);
            Route::delete('account/offices/{id}', [OfficeController::class, 'deleteOffice']);

            // Job offers
            Route::post('account/job-offers', [JobOffersController::class, 'create']);
            Route::get('account/job-offers/{id}', [JobOffersController::class, 'getOwn']);
            Route::put('account/job-offers/{id}', [JobOffersController::class, 'update']);
            Route::post('account/job-offers/{id}/activate', [JobOffersController::class, 'activate']);
            Route::post('account/job-offers/{id}/deactivate', [JobOffersController::class, 'deactivate']);
            Route::delete('account/job-offers/{id}', [JobOffersController::class, 'delete']);
            Route::get('account/job-offers', [JobOffersController::class, 'getAccountJobOffers']);

            // Projects
            Route::get('account/projects/{id}', [ProjectController::class, 'getProject']);
            Route::get('account/projects', [ProjectController::class, 'getProjects']);
            Route::post('account/projects', [ProjectController::class, 'createProject']);
            Route::post('account/projects/{id}', [ProjectController::class, 'updateProject']);
            Route::delete('account/projects/{id}', [ProjectController::class, 'deleteProject']);

            // Watchlists
            Route::get('watchlists', [WatchlistsController::class, 'getWatchlists']);
            Route::get('watchlists/{watchlistId}', [WatchlistsController::class, 'getWatchlist'])->where('watchlistId', '[0-9]+');
            Route::get('watchlists/{watchlistId}/competitions', [WatchlistsController::class, 'getWatchlistCompetitions'])->where('watchlistId', '[0-9]+');
            Route::get('watchlists/{watchlistId}/items', [WatchlistsController::class, 'getWatchlistItems'])->where('watchlistId', '[0-9]+');
            Route::post('watchlists', [WatchlistsController::class, 'postCreate']);
            Route::put('watchlists/{watchlistId}', [WatchlistsController::class, 'updateWatchlist'])->where('watchlistId', '[0-9]+');
            Route::delete('watchlists/{watchlistId}', [WatchlistsController::class, 'deleteWatchlist'])->where('watchlistId', '[0-9]+');
            Route::post('watchlists/{watchlistId}/competitions', [WatchlistsController::class, 'addCompetitionsToWatchlist'])->where('watchlistId', '[0-9]+');
            Route::delete('watchlists/{watchlistId}/competitions', [WatchlistsController::class, 'removeCompetitionsFromWatchlist'])->where('watchlistId', '[0-9]+');
            Route::post('watchlists/{watchlistId}/items', [WatchlistsController::class, 'addItemsToWatchlist'])->where('watchlistId', '[0-9]+');
            Route::delete('watchlists/{watchlistId}/items', [WatchlistsController::class, 'removeItemsFromWatchlist'])->where('watchlistId', '[0-9]+');

            // CV Entries
            Route::get('user/cv-entries', [CvEntriesController::class, 'index']);
            Route::post('user/cv-entries', [CvEntriesController::class, 'create']);
            Route::put('user/cv-entries/{id}', [CvEntriesController::class, 'update']);
            Route::delete('user/cv-entries/{id}', [CvEntriesController::class, 'delete']);
            Route::post('user/change-password', [UsersController::class, 'changePassword']);

            // Search Profiles
            Route::get('search-profiles', [SearchProfileController::class, 'index']);
            Route::get('search-profiles/{id}', [SearchProfileController::class, 'show']);
            Route::post('search-profiles', [SearchProfileController::class, 'create']);
            Route::put('search-profiles/{id}', [SearchProfileController::class, 'update']);

            // User Profile
            Route::post('user/profile-image', [UsersController::class, 'uploadProfileImage']);
            Route::get('user/jury-members', [UsersController::class, 'getUserJuryMembers']);
            Route::get('user/result-winners', [UsersController::class, 'getUserResultWinners']);

            // Archives
            Route::get('archives', [ArchivesController::class, 'index']);
            Route::get('archives/{slug}', [ArchivesController::class, 'show']);
            Route::get('archives/{slug}/download', [ArchivesController::class, 'downloadDocument']);
        });

        Route::get('countries', [LocalizationController::class, 'searchCountries']);
        Route::get('states', [LocalizationController::class, 'searchStates']);
        Route::get('cities', [LocalizationController::class, 'searchCities']);
        Route::get('procedure-types', [FiltersController::class, 'getProcedureTypes']);
        Route::get('departments', [FiltersController::class, 'getDepartments']);
        Route::get('cpvs', [FiltersController::class, 'searchCpvs']);
        Route::get('building-types', [FiltersController::class, 'getBuildingTypes']);

        // Support content types
        Route::get('user-profile-roles', [UsersController::class, 'getUserProfileRoles']);
        Route::get('user-profile-specialisations', [UsersController::class, 'getUserProfileSpecialisations']);
        Route::get('company-specialisations', [AccountsController::class, 'getCompanySpecialisations']);

        Route::get('competitions', [CompetitionsController::class, 'index']);
        Route::get('competitions/{slug}', [CompetitionsController::class, 'show']);
        Route::get('competitions/documents/{id}/download', [CompetitionsController::class, 'downloadDocument']);

        Route::get('results', [ResultsController::class, 'index']);
        Route::get('results/{slug}', [ResultsController::class, 'show']);

        Route::get('tracked-results/{slug}', [ResultsController::class, 'getTrackedResult']);

        Route::get('job-offers', [JobOffersController::class, 'getJobOffers']);
        Route::get('job-offers/{id}', [JobOffersController::class, 'get']);

        Route::get('profiles', [ProfilesController::class, 'index']);
        Route::get('profiles/{id}', [ProfilesController::class, 'show']);
        Route::get('profiles/{id}/jobs/{jobId}', [ProfilesController::class, 'getJobOffer']);
        Route::get('profiles/{id}/team/{userId}', [ProfilesController::class, 'getTeamMember']);
        Route::get('profiles/{id}/project/{userId}', [ProfilesController::class, 'getProject']);

        Route::get('users/{userId}', [ProfilesController::class, 'getBasicUser']);

        Route::get('categories', [MagazineController::class, 'getCategories']);
        Route::get('categories/{slug}', [MagazineController::class, 'getCategory']);
        Route::get('articles', [MagazineController::class, 'getArticles']);
        Route::get('articles/{slug}', [MagazineController::class, 'getArticle']);
        Route::get('events', [MagazineController::class, 'getEvents']);
        Route::get('events/{slug}', [MagazineController::class, 'getEvent']);

        Route::get('menus', [GlobalController::class, 'getMenus']);

        Route::get('global-configuration', [GlobalController::class, 'getConfiguration']);

        Route::get('page/{slug}', [PagesController::class, 'show']);
    }
);
