<?php

use App\Http\Controllers\EmployeeController;
use App\Http\Controllers\InterventionController;
use App\Http\Controllers\SubcontractController;
use App\Http\Controllers\WorkTeamController;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;

/*
|--------------------------------------------------------------------------
| 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::middleware('auth:sanctum')->get('/user', function (Request $request) {
    return $request->user();
});

Route::post("/login", "App\Http\Controllers\LoginController@login");
Route::post("/pass", "App\Http\Controllers\LoginController@createPasword");
Route::post("/verify-token", "App\Http\Controllers\LoginController@verifyToken");
Route::post("/short-encryption", "App\Http\Controllers\LoginController@shortEncryption");
Route::get("/download-catalogue/{id}/{idUser}/{line}/{token}", "App\Http\Controllers\SystemAdministratorController@downloadCatalogue");
Route::get("/download-file/{token}/{idUser}/{line}", "App\Http\Controllers\DocumentManagementController@downloadFile");                   //

Route::middleware(['jwt.auth'])->group(function(){
    //Endpoints generales
    Route::get("/get-modules/{id}/{line}", "App\Http\Controllers\UsersProfilesController@getModules");                                    //Obtiene todos los módulos registrados en el sistema
    Route::get("/get-module/{idModule}/{id}/{line}", "App\Http\Controllers\UsersProfilesController@getModule");                           //Obtiene un módulo a través de su ID
    Route::get("/get-submodule/{idMod}/{idSub}/{id}/{line}", "App\Http\Controllers\UsersProfilesController@getSubmodule");                //Obtiene un submódulo a través de su ID
    Route::get("/get-function/{idMod}/{idSub}/{idFunc}/{id}/{line}", "App\Http\Controllers\UsersProfilesController@getFunction");         //Obtiene una función a través de su ID
    Route::get("/get-screen/{idFunc}/{idScr}/{id}/{line}", "App\Http\Controllers\UsersProfilesController@getScreen");                     //Obtiene una pantalla a través de su ID
    Route::get("/get-material-icons/{id}/{line}", "App\Http\Controllers\SystemAdministratorController@getMaterialIcons");                 //Obtiene el arreglo de los iconos de Material Design
    Route::get("/get-module-functions/{idMod}/{id}/{line}", "App\Http\Controllers\SystemAdministratorController@getModuleFunctions");     //Obtiene las funciones de un módulo
    Route::get("/get-submodules/{idMod}/{id}/{line}", "App\Http\Controllers\SystemAdministratorController@getSubmodules");                //Obtiene todos los submódulos pertenecientes a algún módulo
    Route::get("/get-submodule-functions/{idMod}/{idSub}/{id}/{line}", "App\Http\Controllers\SystemAdministratorController@getSubmoduleFunctions"); //Obtiene todos los submódulos pertenecientes a algún módulo
    //Módulo de usuarios y perfiles
    Route::post("/create-user", "App\Http\Controllers\UsersProfilesController@createUser");                                               //Registra nuevos usuarios en la base de datos
    Route::post("/delete-user", "App\Http\Controllers\UsersProfilesController@deleteUser");                                               //Cambia el estado de los usuarios a Eliminado
    Route::post("/modify-user", "App\Http\Controllers\UsersProfilesController@updateUser");                                               //Cambia los datos de un usuario en específico
    Route::post("/modify-pass", "App\Http\Controllers\UsersProfilesController@updatePass");                                               //Cambia la contraseña de un usuario en específico
    Route::post("/block-user", "App\Http\Controllers\UsersProfilesController@blockUser");                                                 //Permite bloquear o desbloquear un usuario
    Route::post("/modify-profile", "App\Http\Controllers\UsersProfilesController@updateProfile");                                         //Cambia los datos de un perfil en específico
    Route::post("/create-profile", "App\Http\Controllers\UsersProfilesController@createProfile");                                         //Registra nuevos perfiles en la base de datos
    Route::post("/delete-profile", "App\Http\Controllers\UsersProfilesController@deleteProfile");                                         //Cambia el estado de un perfil a Eliminado
    Route::get("/get-users/{id}/{line}", "App\Http\Controllers\UsersProfilesController@getUsers");                                        //Obtiene todos los usuarios registrados
    Route::get("/get-user/{id}/{idUser}/{line}", "App\Http\Controllers\UsersProfilesController@getUser");                                 //Obtiene un usuario en especifico
    Route::get("/get-profiles/{id}/{line}", "App\Http\Controllers\UsersProfilesController@getProfiles");                                  //Obtiene todos los perfiles registrados
    Route::get("/get-profile/{id}/{idUser}/{line}", "App\Http\Controllers\UsersProfilesController@getProfile");                           //Obtiene un perfil en específico
    Route::get("/get-menus/{module}/{submodule}/{id}/{line}", "App\Http\Controllers\UsersProfilesController@getMenus");                   //
    Route::get("/get-initial-permissions/{id}/{line}", "App\Http\Controllers\UsersProfilesController@buildInitialPermissions");           //Crea un json de permisos iniciales
    Route::get("/get-menu/{id}/{line}", "App\Http\Controllers\UsersProfilesController@getMenu");                                          //
    //Módulo administrador del sistema 
    Route::get("/get-last-connections/{id}/{line}", "App\Http\Controllers\SystemAdministratorController@getLastConnections");             //
    Route::get("/get-catalogues/{id}/{line}", "App\Http\Controllers\SystemAdministratorController@getCatalogues");                        //Obtiene todos los catálogos registrados
    Route::get("/get-catalogue-history/{type}/{idUser}/{line}", "App\Http\Controllers\SystemAdministratorController@getCatalogueHistory"); //Obtiene todos los catálogos registrados
    Route::get("/get-user-connections/{id}/{idUser}/{line}", "App\Http\Controllers\SystemAdministratorController@getUserConnections");    //
    Route::get("/get-last-actions/{id}/{line}", "App\Http\Controllers\SystemAdministratorController@getLastActions");                     //
    Route::get("/get-user-actions/{id}/{idUser}/{line}", "App\Http\Controllers\SystemAdministratorController@getUserActions");            //
    Route::get("/generate-download-token/{id_user}/{type}", "App\Http\Controllers\SystemAdministratorController@generateDownloadToken");  //
    Route::get("/read-catalogue/{id}/{idUser}/{line}", "App\Http\Controllers\SystemAdministratorController@readCatalogue");               //
    Route::get("/get-advices/{idUser}/{line}", "App\Http\Controllers\SystemAdministratorController@getAdvices");                          //Obtiene todos los avisos registrados
    Route::get("/get-advice/{id}/{idUser}/{line}", "App\Http\Controllers\SystemAdministratorController@getAdvice");                       //Obtiene un aviso en específico
    Route::get("/get-two-steps-auths/{idUser}/{line}", "App\Http\Controllers\SystemAdministratorController@getTwoStepsAuthUsers");        //Obtiene la lista de usuarios con autenticación en dos pasos
    Route::get("/get-password-format/{idUser}/{line}", "App\Http\Controllers\SystemAdministratorController@getPasswordFormat");           //Obtiene el formato de configuración de contraseñas
    Route::get("/get-sessions-duration/{idUser}/{line}", "App\Http\Controllers\SystemAdministratorController@getSessionsDuration");       //Obtiene la configuración de la duración de las sesiones
    Route::get("/get-active-sessions-number/{idUser}/{line}", "App\Http\Controllers\SystemAdministratorController@getActiveSessionsNumber"); //Obtiene la configuración del número de sesiones máximas configuradas
    Route::get("/get-maintenance-history/{idUser}/{line}", "App\Http\Controllers\SystemAdministratorController@getMaintenanceHistory");   //Obtiene la configuración del número de sesiones máximas configuradas
    Route::get("/get-maintenance-status/{idUser}/{line}", "App\Http\Controllers\SystemAdministratorController@getMaintenanceStatus");     //Obtiene el estado actual del modo mantenimiento
    Route::get("/get-email-servers/{idUser}/{line}", "App\Http\Controllers\SystemAdministratorController@getEmailServers");               //Obtiene la lista de servidores de email registrados
    Route::get("/get-email-server/{host}/{user}/{idUser}/{line}", "App\Http\Controllers\SystemAdministratorController@getEmailServer");   //Obtiene la información de un servidor en específico
    Route::get("/get-email-templates/{idUser}/{line}", "App\Http\Controllers\SystemAdministratorController@getEmailTemplates");           //Obtiene las plantillas de correo electrónico registradas
    Route::get("/get-email-template/{id}/{idUser}/{line}", "App\Http\Controllers\SystemAdministratorController@getEmailTemplate");        //Obtiene la información de una plantilla en específico
    Route::get("/get-login-images/{idUser}/{line}", "App\Http\Controllers\SystemAdministratorController@getLoginImages");                 //Obtiene las imagenes configuradas para la vista de inicio de sesión
    Route::get("/get-scada-list/{idUser}/{line}", "App\Http\Controllers\SystemAdministratorController@getSCADAList");                     //Obtiene los SCADA registrados en el sistema
    Route::get("/get-generated-tokens/{idUser}/{line}", "App\Http\Controllers\SystemAdministratorController@getGeneratedTokens");         //Obtiene los tokens generados para el acceso de los SCADA
    Route::get("/get-web-services/{idUser}/{line}", "App\Http\Controllers\SystemAdministratorController@getWebServices");                 //Obtiene la lista de servicios web registrados
    Route::get("/get-routed-tokens/{idUser}/{line}", "App\Http\Controllers\SystemAdministratorController@getRoutedTokens");               //Obtiene la lista de tokens enrutados
    Route::get("/get-backups-list/{idUser}/{line}", "App\Http\Controllers\SystemAdministratorController@getBackupsList");               //Obtiene la lista de tokens enrutados
    Route::post("/set-last-connection", "App\Http\Controllers\SystemAdministratorController@setLastConnection");                          //
    Route::post("/save-catalogue", "App\Http\Controllers\SystemAdministratorController@saveCatalogue");                                   //Registra un nuevo catalogo
    Route::post("/upload-file", "App\Http\Controllers\SystemAdministratorController@uploadFile");                                         //Permite subir un nuevo archivo de manera temporal
    Route::post("/delete-file", "App\Http\Controllers\SystemAdministratorController@deleteFile");                                         //elimina un archivo del almacenamiento temporal
    Route::post("/publish-advice", "App\Http\Controllers\SystemAdministratorController@publishAdvice");                                   //Registra un nuevo aviso
    Route::post("/update-advice", "App\Http\Controllers\SystemAdministratorController@updateAdvice");                                     //Actualiza un aviso existente
    Route::post("/delete-advice", "App\Http\Controllers\SystemAdministratorController@deleteAdvice");                                     //Elimina un aviso existente
    Route::post("/set-two-steps-auth", "App\Http\Controllers\SystemAdministratorController@setTwoStepsAuth");                             //Actualiza la autenticación en dos pasos de un usuario en específico
    Route::post("/save-password-format", "App\Http\Controllers\SystemAdministratorController@savePasswordFormat");                        //Actualiza el formato rquerido para la actualización de contraseñas
    Route::post("/save-sessions-duration", "App\Http\Controllers\SystemAdministratorController@saveSessionsDuration");                    //Actualiza la configuración de duración de las sesiones
    Route::post("/save-active-sessions-number", "App\Http\Controllers\SystemAdministratorController@saveActiveSessionsNumber");           //Actualiza la configuración del número de sesiones máximas configuradas
    Route::post("/activate-maintenance-mode", "App\Http\Controllers\SystemAdministratorController@activateMaintenanceMode");              //Activa el modo mantenimiento
    Route::post("/deactivate-maintenance-mode", "App\Http\Controllers\SystemAdministratorController@deactivateMaintenanceMode");          //Desactiva el modo mantenimiento
    Route::post("/register-email-server", "App\Http\Controllers\SystemAdministratorController@registerEmailServer");                      //Registra un nuevo servidor de envíos de correo
    Route::post("/update-email-server", "App\Http\Controllers\SystemAdministratorController@updateEmailServer");                          //Actualiza la información de un servidor en específico
    Route::post("/delete-email-server", "App\Http\Controllers\SystemAdministratorController@deleteEmailServer");                          //Realiza la eliminación logica del registro
    Route::post("/deactivate-email-server", "App\Http\Controllers\SystemAdministratorController@deactivateEmailServer");                  //Realiza la activación/desactivación del registro
    Route::post("/register-email-template", "App\Http\Controllers\SystemAdministratorController@registerEmailTemplate");                  //Registra una plantilla de correo electronico nueva
    Route::post("/update-email-template", "App\Http\Controllers\SystemAdministratorController@updateEmailTemplate");                      //Actualiza la información de una plantilla de correo electronico
    Route::post("/delete-email-template", "App\Http\Controllers\SystemAdministratorController@deleteEmailTemplate");                      //Elimina una plantilla de correo electronico en específico
    Route::post("/save-login-image", "App\Http\Controllers\SystemAdministratorController@saveLoginImage");                                //Actualiza una imagen específoca del login
    Route::post("/update-module-icons", "App\Http\Controllers\SystemAdministratorController@updateModuleIcons");                          //Actualiza los íconos de los módulos
    Route::post("/update-submodule-icons", "App\Http\Controllers\SystemAdministratorController@updateSubmoduleIcons");                    //Actualiza los íconos de los submódulos
    Route::post("/update-function-icons", "App\Http\Controllers\SystemAdministratorController@updateFunctionIcons");                      //Actualiza los íconos de las funciones
    Route::post("/register-scada", "App\Http\Controllers\SystemAdministratorController@registerSCADA");                                   //Registra un nuevo SCADA
    Route::post("/update-scada", "App\Http\Controllers\SystemAdministratorController@updateSCADA");                                       //Actualiza el nombre de un SCADA en específico
    Route::post("/delete-scada", "App\Http\Controllers\SystemAdministratorController@deleteSCADA");                                       //Elimina un SCADA en específico
    Route::post("/generate-scada-token", "App\Http\Controllers\SystemAdministratorController@generateSCADAtoken");                        //Asigna un token a un SCADA
    Route::post("/revoke-token", "App\Http\Controllers\SystemAdministratorController@revokeToken");                                       //Revoca un token en específico
    Route::post("/register-web-service", "App\Http\Controllers\SystemAdministratorController@registerWebService");                        //Registra un nuevo servicio web
    Route::post("/change-token-access", "App\Http\Controllers\SystemAdministratorController@changeTokenAccess");                          //Cambia el estado de un token
    Route::post("/change-web-service", "App\Http\Controllers\SystemAdministratorController@changeWebService");                            //Cambia el servicio web ligado a un token
    Route::post("/update-web-service", "App\Http\Controllers\SystemAdministratorController@updateWebService");                            //Actualiza la información de un servicio web
    Route::post("/change-ws-status", "App\Http\Controllers\SystemAdministratorController@changeWSstatus");                                //Actualiza el estado de un servicio web
    //Módulo gestión documental electrónica
    Route::get("/get-file-info/{id}/{idUser}/{line}", "App\Http\Controllers\DocumentManagementController@getFileInfo");                   //Obtiene la información de un archivo en específico
    Route::get("/get-download-token/{idFile}/{idUser}/{line}", "App\Http\Controllers\DocumentManagementController@getDownloadToken");     //Permite generar un token para descargar un archivo
});

Route::controller(SubcontractController::class)->prefix('/subcontract')->group(function () {
    Route::get('/consult/{line_number}',                                'getConsultOfSubcontratists');
    Route::put('/inactive-subcontratist/{id_subcontratist}',            'updateToInactiveStatus');
    Route::get('/subcontratists/{line_number}',                         'getAllSubcontratists');
    Route::get('/active-subcontratists/{line_number}',                  'getActiveSubcontratists');
    Route::post('/',                                                    'storeSubcontratist');
    Route::get('/subcontratist/{id_subcontratist}/{line_number}',       'getSubcontratistById');
    Route::put('/{id_subcontratist}',                                   'updateSubcontratist');
    Route::get('/contracts/subcontratists/{line_number}',               'getContractsOfEverySubcontratist');
    Route::get('/contracts/history/{id_subcontratist}/{line_number}',   'getContractsBySubcontratist');
    Route::post('/downoload-info-excel',                                'downoloadSubcontractInfoOnExcel');
    Route::post('/downoload-info-pdf',                                  'downoloadSubcontractInfoOnPdf');
});

Route::controller(EmployeeController::class)->prefix('/employee')->group(function () {
    Route::get('/consult/{line_number}',                                'getConsultOfEmployees');
    Route::get('/user-avaible/{line_number}',                           'getAvaibleUsers');
    Route::get('/documents/{id_employee}/{line_number}',                'getDocumentsByEmployee');
    Route::get('/orders/{id_employee}/{line_number}',                   'getInterventionsByEmployee');
    Route::put('/inactive-employee/{id_employee}',                      'updateToInactiveStatus');
    Route::post('/',                                                    'storeEmployee');
    Route::get('/{id_employee}/{line_number}',                          'getEmployeeById');
    Route::get('/{line_number}',                                        'getAllEmployees');
    Route::get('/contracts/employees/{line_number}',                    'getContractsOfEveryEmployee');
    Route::get('/contracts/history/{id_employee}/{line_number}',        'getDetailsOfContractsByEmployee');
    Route::post('/downoload-details-excel',                             'downoloadEmployeeInfoOnExcel');
    Route::post('/downoload-details-pdf',                               'downoloadEmployeeInfoOnPdf');
    Route::post('/{id_employee}',                                       'updateEmployee'); # Se cambia el metodo PUT a POST por problema en form-data con archivos
});

Route::controller(InterventionController::class)->prefix('/intervention')->group(function () {
    Route::get('/consult/{line_number}',                                  'getConsultOfInterventions');
    Route::get('/detail/{id_intervention}/{line_number}',                 'getDetailsOfInterventionsById');
    Route::get('/contract/consult/{line_number}',                         'getConsultOfContracts');
    Route::get('/contract/{id_intervention}/{line_number}',               'getContractById');
    Route::post('/contract',                                              'storeContract');
    Route::get('/contract/{line_number}',                                 'getAllContracts');
});

Route::controller(WorkTeamController::class)->prefix('/workteam')->group(function () {
    Route::get('/{line_number}',                                          'getConsultOfWorkteams');
    Route::get('/active-teams/{line_number}',                             'getActiveWorkteams');
    Route::get('/{id_workteam}/{line_number}',                            'getWorkteamById');
    Route::get('/details/{id_workteam}/{line_number}',                    'getDetailsOfWorkteamById');
    Route::put('/inactive-workteam/{id_workteam}',                        'updateToInactiveStatus');
    Route::post('/',                                                      'storeWorkteam');
    Route::put('/{id_workteam}',                                          'updateWorkteam');
});