<?php

use App\Http\Controllers\Frontend\Auth\ConfirmAccountController;
use App\Http\Controllers\Frontend\Auth\ForgotPasswordController;
use App\Http\Controllers\Frontend\Auth\LoginController;
use App\Http\Controllers\Frontend\Auth\PasswordExpiredController;
use App\Http\Controllers\Frontend\Auth\RegisterController;
use App\Http\Controllers\Frontend\Auth\ResetPasswordController;
use App\Http\Controllers\Frontend\Auth\SocialLoginController;
use App\Http\Controllers\Frontend\Auth\UpdatePasswordController;
use App\Http\Controllers\Frontend\Auth\InviteController;

/*
 * Frontend Access Controllers
 * All route names are prefixed with 'frontend.auth'.
 */
Route::group(['namespace' => 'Auth', 'as' => 'auth.'], function () {
    // These routes require the user to be logged in
    Route::group(['middleware' => 'auth'], function () {
        Route::get('logout', [LoginController::class, 'logout'])->name('logout');

        // These routes can not be hit if the password is expired
        Route::group(['middleware' => 'password_expires'], function () {
            // Change Password Routes
            Route::patch('password/update', [UpdatePasswordController::class, 'update'])->name('password.update');
        });

        // Password expired routes
        Route::get('password/expired', [PasswordExpiredController::class, 'expired'])->name('password.expired');
        Route::patch('password/expired', [PasswordExpiredController::class, 'update'])->name('password.expired.update');

        // invitation to lab routes
        Route::get('invite', [InviteController::class, 'invite'])->name('invite');
        Route::post('invite', [InviteController::class, 'process'])->name('process');
        Route::get('invite/{id}/resend', [InviteController::class, 'resendinvite'])->name('resendinvite');
        Route::get('invite/{id}/delete', [InviteController::class, 'deleteinvite'])->name('deleteinvite');

        Route::get('inviteaccept/{id}', [InviteController::class, 'acceptfromnotification'])->name('acceptinvite');
        Route::get('invitereject/{id}', [InviteController::class, 'rejectfromnotification'])->name('rejectinvite');

        // leave a lab
        Route::post('leavelab', [\App\Http\Controllers\Frontend\Lab\LabController::class, 'leaveLab'])->name('leavelab');
        Route::post('bootfromlab', [\App\Http\Controllers\Frontend\Lab\LabController::class, 'bootFromLab'])->name('bootfromlab');

        Route::get('account/confirm/{token}', [ConfirmAccountController::class, 'confirm'])->name('account.confirm');
        Route::get('account/confirm/resend/{uuid}', [ConfirmAccountController::class, 'sendConfirmationEmail'])->name('account.confirm.resend');


    });

    // These routes require no user to be logged in
    Route::group(['middleware' => 'guest'], function () {
        // Authentication Routes
        Route::get('login', [LoginController::class, 'showLoginForm'])->name('login');
        Route::post('login', [LoginController::class, 'login'])->name('login.post');

        // Socialite Routes
        Route::get('login/{provider}', [SocialLoginController::class, 'login'])->name('social.login');
        Route::get('login/{provider}/callback', [SocialLoginController::class, 'login']);

        // *beta* Registration Routes
        Route::get('register_beta', [RegisterController::class, 'showBetaRegistrationForm'])->name('register_beta');
        Route::post('register_beta', 'RegisterController@register_beta')->name('register_beta.post');
        //Route::post('register_beta', function(){
        //    dd('hi');
       // });//->name('register_beta.post');

        // Registration Routes
        // beta registration for now
//        Route::get('register', [RegisterController::class, 'showBetaRegistrationForm'])->name('register');
//        Route::post('register', 'RegisterController@register_beta')->name('register.post');
        //TODO re-enable these when beta registration is over
        Route::get('register', [RegisterController::class, 'showRegistrationForm'])->name('register');
        Route::post('register', [RegisterController::class, 'register'])->name('register.post');



        // Confirm Account Routes
      //  Route::get('account/confirm/{token}', [ConfirmAccountController::class, 'confirm'])->name('account.confirm');
      //  Route::get('account/confirm/resend/{uuid}', [ConfirmAccountController::class, 'sendConfirmationEmail'])->name('account.confirm.resend');

        // Password Reset Routes
        Route::get('password/reset', [ForgotPasswordController::class, 'showLinkRequestForm'])->name('password.email');
        Route::post('password/email', [ForgotPasswordController::class, 'sendResetLinkEmail'])->name('password.email.post');

        Route::get('password/reset/{token}', [ResetPasswordController::class, 'showResetForm'])->name('password.reset.form');
        Route::post('password/reset', [ResetPasswordController::class, 'reset'])->name('password.reset');

        Route::get('accept/{token}', [InviteController::class, 'accept'])->name('accept');
    });
});
