<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\AuthController;
use App\Http\Controllers\FileController;
use App\Http\Controllers\UserController;
use App\Http\Controllers\LetterController;
use App\Http\Controllers\RatificationLetterController;
use App\Http\Controllers\SearchRatificationLetterController;
use App\Http\Controllers\InfoBoxController;
use App\Http\Controllers\InfoBoxFilesController;
use App\Http\Controllers\LegalEntityController;
use App\Http\Controllers\CompanyController;
use App\Http\Middleware\CheckUserState;
use App\Http\Middleware\TestAuthUser;

/*
|--------------------------------------------------------------------------
| API Routes
|--------------------------------------------------------------------------
|
| Here is where you can register API routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| is assigned the "api" middleware group. Enjoy building your API!
|
*/

Route::group(['prefix' => 'v1'], function () {
    Route::post('/email/verify/{id}/{hash}', [AuthController::class, 'verify'])->name('verification.verify');
    Route::get('/email/resend/{id}', [AuthController::class, 'resend'])->name('verification.resend');
    Route::post('register', [AuthController::class, 'postRegister']);
    Route::post('companies', [CompanyController::class, 'postCompanies']);
    Route::post('upload-file', [FileController::class, 'uploadFile']);
    Route::post('login', [AuthController::class, 'postLogin']);
    Route::post('verify-2fa', [AuthController::class, 'postVerifyTwoFactor']);
    Route::post('forgot-password', [AuthController::class, 'postForgotPassword']);
    Route::post('reset-password', [AuthController::class, 'postResetPassword'])->name('password.reset');

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

        // START Users
        Route::get('users', [UserController::class, 'getUsers']);
        Route::get('user', [UserController::class, 'getUser']);
        Route::post('user/update-personal-info', [UserController::class, 'postUserPersonalInfo']);
        Route::post('user/update-address', [UserController::class, 'postUserAddress']);
        Route::post('user/update-company', [UserController::class, 'postUserCompany']);
        Route::delete('user/delete/{id}', [UserController::class, 'deleteUser']);
        Route::post('users/update-state', [UserController::class, 'updateUserState']);
        Route::post('users/profile-image', [UserController::class, 'uploadProfileImage']);
        Route::post('users/change-password', [UserController::class, 'postChangePassword']);
        Route::post('users/resend', [UserController::class, 'postResend']);
        Route::post('users/export', [UserController::class, 'postExport']);
        Route::get('users/search', [UserController::class, 'getSearchUsers']);
        // END Users

        // START Companies
        Route::get('companies', [CompanyController::class, 'getCompanies']);
        // END Companies

        // START Legal Entities
        Route::post('legal-entities', [LegalEntityController::class, 'postLegalEntities']);
        Route::get('legal-entities', [LegalEntityController::class, 'getLegalEntities']);
        Route::delete('legal-entities/{id}', [LegalEntityController::class, 'deleteLegalEntity']);
        // END Legal Entities

        // START Files
        Route::get('download-letter/{id}', [FileController::class, 'downloadLetter']);
        Route::get('download-ratification-letter/{id}', [FileController::class, 'downloadRatificationLetter']);
        // END Files

        // START Letters
        Route::get('letters', [LetterController::class, 'getLetters']);
        Route::post('letters', [LetterController::class, 'createLetter']);
        Route::get('letters/{id}', [LetterController::class, 'getLetter']);
        Route::put('letters/{id}', [LetterController::class, 'updateLetter']);
        Route::delete('letters/{id}', [LetterController::class, 'deleteLetter']);
        // END Letters

        // START Ratification Letters
        Route::get('ratification-letters-party', [RatificationLetterController::class, 'getRatificationLettersParty']);
        Route::get('ratification-letters', [RatificationLetterController::class, 'getRatificationLetters']);
        Route::post('ratification-letters', [RatificationLetterController::class, 'createRatificationLetter']);
        Route::get('ratification-letters/{id}', [RatificationLetterController::class, 'getRatificationLetter']);
        Route::put('ratification-letters/{id}', [RatificationLetterController::class, 'updateRatificationLetter']);
        Route::delete('ratification-letters/{id}', [RatificationLetterController::class, 'deleteRatificationLetter']);
        Route::post('ratification-letters/{id}/update-status', [RatificationLetterController::class, 'updateRatificationLetterStatus']);
        // END Ratification Letters

        Route::get('search-ratification-letters', [SearchRatificationLetterController::class, 'getSearchRatificationLetters']);

        Route::get('/info-box', [InfoBoxController::class, 'getInfoBox']);
        Route::post('/info-box', [InfoBoxController::class, 'createOrUpdate']);
        Route::put('/info-box', [InfoBoxController::class, 'createOrUpdate']);
        Route::delete('/info-box', [InfoBoxController::class, 'deleteInfoBox']);

        Route::get('/info-box-files', [InfoBoxFilesController::class, 'getInfoBox']);
        Route::post('/info-box-files', [InfoBoxFilesController::class, 'createOrUpdate']);
        Route::put('/info-box-files', [InfoBoxFilesController::class, 'createOrUpdate']);
        Route::delete('/info-box-files', [InfoBoxFilesController::class, 'deleteInfoBox']);
    });
});
