<?php

// Laravel
use Illuminate\Support\Facades\Broadcast;
use Illuminate\Support\Facades\Route;

// Creatia
use App\Http\Controllers\Auth\AuthController;
use App\Http\Controllers\Auth\MfaController;
use App\Http\Controllers\Auth\TokenController;
use App\Http\Controllers\BaseController;

class Account {
    public static function routes() {

        // Standard
        static::guest();
        static::user();
    }

    /*
     * - Guest routes are only accessible to non-authed users.
     * - We split up the guest routes and user routes for readability.
     */
    
    private static function guest() {
        Route::group(['middleware' => ['api'], 'prefix' => 'auth'], function ($r) {
    
            // Login
            Route::post('login', [AuthController::class, 'login'])->name('auth-acc-login');
            
            // Request Reset Password
            Route::post('reset-password', [AuthController::class, 'reset'])->middleware('throttle:3,60')->name('auth-acc-request-reset-password');
            
            // Token Validity
            Route::get('{_type}/{_token}', [TokenController::class, 'check'])->name('auth-acc-verify');

            // Setup Password
            Route::post('setup/{_token}', [TokenController::class, 'setup'])->name('auth-acc-setup-password');

            // Reset Password
            Route::post('reset/{_token}', [TokenController::class, 'reset'])->name('auth-acc-reset-password');
        
        });

    }

    private static function user() {
        Route::group(['middleware' => ['auth:api'], 'prefix' => 'auth'], function($r) {
            
            // Logout
            Route::get('logout', [AuthController::class, 'logout'])->name('auth-acc-logout');

            // Refresh Token
            Route::get('refresh', [AuthController::class, 'refresh'])->name('auth-acc-refresh');

            // Lease
            Route::get('lease', [AuthController::class, 'lease'])->name('auth-acc-lease');
            
            // User Details
            Route::any('information', [AuthController::class, 'me'])->name('auth-acc-me');

            // Acknowledge
            Route::any('alert/acknowledge', [AuthController::class, 'acknowledge_alert'])->name('auth-alert-ack');

            // MFA Status
            Route::get('mfa', [MfaController::class, 'status'])->name('auth-acc-mfa-status');

            // MFA Setup
            Route::post('mfa/setup', [MfaController::class, 'setup'])->name('auth-acc-mfa-setup');

            // MFA Confirm
            Route::post('mfa/confirm', [MfaController::class, 'confirm'])->middleware('throttle:6,1')->name('auth-acc-mfa-confirm');

            // MFA Disable
            Route::post('mfa/disable', [MfaController::class, 'disable'])->middleware('throttle:6,1')->name('auth-acc-mfa-disable');

        });
    }
}
