package com.dacrt.SBIABackend.controler;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Optional;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;
import javax.servlet.http.HttpServletRequest;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.dacrt.SBIABackend.security.dto.AuditAllDto;
import com.dacrt.SBIABackend.security.dto.AuditAllResponseDto;
import com.dacrt.SBIABackend.security.dto.AuditDtoMod;
import com.dacrt.SBIABackend.security.dto.AuditModResponseDto;
import com.dacrt.SBIABackend.security.dto.AuditRequestDto;
import com.dacrt.SBIABackend.security.dto.MenuResponseDto;
import com.dacrt.SBIABackend.dto.WorkersDto;
import com.dacrt.SBIABackend.dto.WorkersRequestDto2;
import com.dacrt.SBIABackend.dto.requestDto.UnitsRequestNewDto;
import com.dacrt.SBIABackend.dto.requestDto.WorkersRequestBodyDto;
import com.dacrt.SBIABackend.dto.requestDto.WorkersRequestDto;
import com.dacrt.SBIABackend.dto.StatusDto;
import com.dacrt.SBIABackend.dto.SuppliersDto;
import com.dacrt.SBIABackend.dto.SuppliersDtoStatus;
import com.dacrt.SBIABackend.dto.responseDto.WorkerEntryResponseDto;
import com.dacrt.SBIABackend.dto.responseDto.WorkersResponseDto;
import com.dacrt.SBIABackend.entity.Facilities;
import com.dacrt.SBIABackend.entity.Positions;
import com.dacrt.SBIABackend.entity.Positionunits;
import com.dacrt.SBIABackend.entity.Unitprocesses;
import com.dacrt.SBIABackend.entity.Units;
import com.dacrt.SBIABackend.entity.Vicepresidencies;
import com.dacrt.SBIABackend.entity.Workers;
import com.dacrt.SBIABackend.security.dto.RespuestaDto;
import com.dacrt.SBIABackend.security.dto.RespuestaMsgDto;
import com.dacrt.SBIABackend.security.dto.RespuestaValueDto;
import com.dacrt.SBIABackend.security.dto.RoleDto;
import com.dacrt.SBIABackend.security.dto.UsersListDto;
import com.dacrt.SBIABackend.security.dto.PrivilegesAllDto;
import com.dacrt.SBIABackend.security.dto.PrivilegesDto;
import com.dacrt.SBIABackend.security.dto.ParamsDto;
import com.dacrt.SBIABackend.security.dto.ParamsResponseDto;
import com.dacrt.SBIABackend.security.entity.Audit;
import com.dacrt.SBIABackend.security.entity.Params;
import com.dacrt.SBIABackend.security.entity.Roles;
import com.dacrt.SBIABackend.security.entity.Users;
import com.dacrt.SBIABackend.security.repository.ParamsRepository;
import com.dacrt.SBIABackend.security.repository.RolesPrivilegesRepository;
import com.dacrt.SBIABackend.security.repository.UsersRepository;
import com.dacrt.SBIABackend.security.service.UsersService;
import com.dacrt.SBIABackend.service.WorkersService;
import com.dacrt.SBIABackend.security.service.MenuService;
import com.dacrt.SBIABackend.security.service.ParamsService;
import com.dacrt.SBIABackend.security.service.SecurityService;
import com.dacrt.SBIABackend.utils.HttpReqRespUtils;
import com.dacrt.SBIABackend.security.repository.AuditRepository;
import com.dacrt.SBIABackend.repository.PositionsRepository;
import com.dacrt.SBIABackend.repository.PositionunitsRepository;
import com.dacrt.SBIABackend.repository.WorkersRepository;


@RestController
//@RequestMapping("/units")   
@CrossOrigin(origins = "*")

public class WorkersController {
	
	@Autowired
	private ParamsRepository paramsRepository;
	
	@Autowired
	private UsersRepository usersRepository;
	
	@Autowired
	private AuditRepository auditRepository;
	
	
	@Autowired
	private RolesPrivilegesRepository rolesPrivilegesRepository;
	
	@Autowired
	UsersService usersService;
	
	@Autowired
	WorkersService workersService;
	
	@Autowired
	MenuService menuService;
	
	@Autowired
	ParamsService paramsService;
	
	@Autowired
	SecurityService securityService;
	
	
	@Autowired
	WorkersRepository workersRepository;
	
	@Autowired
	PositionsRepository positionsRepository;
	
	@Autowired
	PositionunitsRepository positionunitsRepository;
	
	@Autowired
    private JdbcTemplate jdbcTemplate;
	
	@PersistenceContext
    private EntityManager entityManager;
	
	@Value("${spring.datasource.url}")
	private String conexion;
	
	@Value("${spring.datasource.username}")
	private String userbd;
	
	@Value("${spring.datasource.password}")
	private String passbd;
	
	//@GetMapping("/menus)
		//public ResponseEntity<MenuResponseDto> menu(@PathVariable final String sessionid) throws ParseException {
		@PostMapping("/workers")
		public ResponseEntity<WorkersResponseDto> workers(HttpServletRequest request,@RequestBody UsersListDto tiposfiltros) throws ParseException {
			RespuestaDto respuesta = new RespuestaDto("", false);
			HttpStatus estatus = HttpStatus.FORBIDDEN;
			WorkersResponseDto workersResponseDto = new WorkersResponseDto();
		//	ParamsDto detalleParams;
			WorkersDto detalleWorkers;
			StatusDto detalleStatus;
			StatusDto detalleCargo;
			PrivilegesAllDto detallePrivilege;
		     
		     Long cuantosregistro = (long) 0;
		     List<PrivilegesAllDto> listasPrivelege = new ArrayList<>();
			 
			 String sessionid = request.getHeader("Authorization");
			  Date fecha = new Date();
			    SimpleDateFormat  formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		        String dataFormattata = formatter.format(fecha);
		        Date fechaDate = formatter.parse(dataFormattata);
		        AuditRequestDto  auditDto=new AuditRequestDto();
		       
		        
		     
		       
		        
		   	  String searchIn = "";
		     // String searchModule = "";
			  int searchStatus = 0;
			  int idrol;
			  String contentIn = "";
			 
			  String fechaComoCadena;
			 int orderIn = 0;
			 int offsetIn = 0;
			 int numofrecordsIn = 0;
			 Optional<Params> deSessDuration=paramsRepository.findByParamname("SESSION_DURATION");
			 String SessionDuration=deSessDuration.get().getValue();
			 int duracionSession = Integer.parseInt(SessionDuration);
			 Date fecha2 = new Date();
			
			 
				if (sessionid==null) {
					String var = "";
					boolean bloked = false;
					RespuestaDto respuestaDto = new RespuestaDto(var, bloked);
					respuestaDto.setBlocked(bloked);
					respuestaDto.setMsg("Sesión expirada o inválida");
					//Error 400
					return new ResponseEntity(respuestaDto, HttpStatus.BAD_REQUEST);
				} else   {
					 
					   sessionid = sessionid.substring(7);
					   Optional<Users> encontreSessionUsuario =usersRepository.getBySessionid(sessionid);
					//   String usuarioIN = encontreSessionUsuario.get().getUsr();
					 //  int position = usuarioIN.indexOf('('); 
					   
					   if (encontreSessionUsuario.isPresent()) {
						   
						   Date FechaReg = encontreSessionUsuario.get().getValidthru(); 
						   //Llamada a la funcion que validad el tiempo de Session, retorna la fecha sumandole el tiempo de session activa, y vacio si no esta activa
						   

						   // fechaComoCadena  = securityService.consultarSessionActiva(FechaReg,fecha2);
						    fechaComoCadena  = securityService.consultarSessionActiva(FechaReg,fecha2,encontreSessionUsuario.get().getId());

						   
						    if (fechaComoCadena=="") {
							   
							   
							   
							   String var = "";
								boolean bloked = false;
								RespuestaMsgDto respuestaDto = new RespuestaMsgDto(var);
								//respuestaDto.setBlocked(bloked);
								respuestaDto.setMsg("Sesión expirada o inválida"); 
								return new ResponseEntity(respuestaDto, HttpStatus.UNAUTHORIZED);
							   
						    }
						   
						   // Este proceso permite obtener un listado de los empleados. (Priv 420)
						   Roles roles = encontreSessionUsuario.get().getRolid();
						   idrol = roles.getId();
						   int rolisvalid = auditRepository.getCantbyRolAndPrivi(idrol, 420);
						   
						   if (rolisvalid==0) {
							   
							   String var = "";
								boolean bloked = false;
								RespuestaMsgDto respuestaDto = new RespuestaMsgDto(var);
								//respuestaDto.setBlocked(bloked);
								respuestaDto.setMsg("No tiene los Privilegios"); 
								return new ResponseEntity(respuestaDto, HttpStatus.FORBIDDEN);
								
						   }
							  //searchIn = tiposfiltros.getFilters().getSearch();	
							 
						   searchIn = tiposfiltros.getFilters().getSearch();
							  String Salida = usersService.verificarCaracteresValidosConRegex(searchIn);
							  
							  if (Salida=="NOOK") {
								  String var = "";
									boolean bloked = false;
									RespuestaMsgDto respuestaDto = new RespuestaMsgDto(var);
									//respuestaDto.setBlocked(bloked);
									respuestaDto.setMsg("Caracteres no permitidos en la busqueda"); 
									return new ResponseEntity(respuestaDto, HttpStatus.BAD_REQUEST);
							  }
							  searchIn = usersService.eliminarAcentosService(tiposfiltros.getFilters().getSearch());
							  
							  searchStatus = tiposfiltros.getFilters().getStatus();						
							  orderIn = tiposfiltros.getOrder();
							  offsetIn = tiposfiltros.getOffset();
							  numofrecordsIn = tiposfiltros.getNumofrecords();
							  
							  contentIn = tiposfiltros.getContent();
							  if (contentIn !=null) {
							  menuService.iscontentdiffnull(contentIn, encontreSessionUsuario.get().getId());
							  }							  												  						
						
					 } else {
							String var = "";
							boolean bloked = false;
							RespuestaDto respuestaDto = new RespuestaDto(var, bloked);
							respuestaDto.setBlocked(bloked);
							respuestaDto.setMsg("Sesión expirada o inválida");
							//Error 400
							return new ResponseEntity(respuestaDto, HttpStatus.UNAUTHORIZED);
					 }
				}
				
				
			
			try {
				
				
				//String SentenciaBase = "SELECT new com.dacrt.SBIABackend.dto.requestDto.WorkersRequestDto (u.id,u.name,u.status,CASE WHEN u.status = 1 then 'Activo' ELSE 'Inactivo' END AS estatus,u.ref,p.id AS idcargo,p.name AS namecargo) FROM Workers u,Positions p";
    				
				String SentenciaBase = "SELECT new com.dacrt.SBIABackend.dto.WorkersRequestDto2 (u.id,u.name,u.status,CASE WHEN u.status = 1 then 'Activo' ELSE 'Inactivo' END AS estatus,u.ref,p.id AS idcargo,p.name AS namecargo)"
						+ " FROM Workers u,Positions p,Positionunits pu ";
	
				String QueryTotal = "";
				String name = "u.name";
				String status = "u.status";	
				String ref = "u.ref";	
				String id_wor = "u.id";
				String namecargo = "p.name";	
				String lowername = " main.sinacentos(LOWER(u.name)) ";
				String lowerref = " main.sinacentos(LOWER(u.ref)) ";
				String lowernamepos = " main.sinacentos(LOWER(p.name)) ";
				String LowerSearch = searchIn.toLowerCase();
			
				 switch (searchIn) { 
				    case "":  // viene sin busqueda por el like
				    	//QueryTotal = SentenciaBase;
				    	//QueryTotal = SentenciaBase  + " WHERE " + lowername + " LIKE " + "'%" + "" + "%'";
				    	//QueryTotal = SentenciaBase  + " WHERE p.id = u.positionid  ";
				    	QueryTotal = SentenciaBase  + " WHERE pu.id = u.positionunitid and pu.positionid = p.id ";
				    	//where  
				     break;
				  
				    default:	// viene con el parametro para buscar por el like		   			    				    	
				    	QueryTotal = SentenciaBase + " WHERE pu.id = u.positionunitid and pu.positionid = p.id AND (" + lowername + " LIKE  " + "'%" + LowerSearch + "%'" + " OR " +  lowerref + " LIKE  " + "'%" + LowerSearch + "%'"  + " OR " +  lowernamepos + " LIKE  " + "'%" + LowerSearch + "%')";
				    	
		         }
				 
				 switch (searchStatus) { 
				    case 0:  // Busca por cualquier estatus
				    	QueryTotal = QueryTotal;
				     break;
				    case 1:  // Busca por estatus activo
				    	
				    	QueryTotal = QueryTotal  + " AND " + status + " = " + searchStatus;
				     break;
				    case 2:  // Busca por estatus Inactivo
				    	
				    	//QueryTotal = QueryTotal  + " AND " + status + " = " + searchStatus;
				    	QueryTotal = QueryTotal  + " AND " + "u.status" + " = " + 0;
				     break;
				  
				    default:	// viene con el parametro para buscar por el like		   			    				    	
				    	String var2 = "";
						boolean bloked = false;
						RespuestaMsgDto respuestaDto = new RespuestaMsgDto(var2);
						respuestaDto= new RespuestaMsgDto("Error interno del servidor");
						estatus=HttpStatus.INTERNAL_SERVER_ERROR;   
						return new ResponseEntity(respuestaDto, estatus);
				    	
		         }
				 
				 TypedQuery<WorkersRequestDto2> paramsCount= entityManager.createQuery(QueryTotal, WorkersRequestDto2.class);
				 cuantosregistro = (long) paramsCount.getResultList().size();
				 
				  String ordena="";
				  if (orderIn == 1 || orderIn == 2 || orderIn == 3 || orderIn == 4 || orderIn == 99) {
					  ordena = " ASC";
				 }  else if (orderIn == -1 || orderIn == -2 || orderIn == -3 || orderIn == -4 || orderIn == -99) {
					  ordena = " DESC";
				 } else {
					 	String var2 = "";
						boolean bloked = false;
						RespuestaMsgDto respuestaDto = new RespuestaMsgDto(var2);
						respuestaDto= new RespuestaMsgDto("Error interno del servidor");
						estatus=HttpStatus.INTERNAL_SERVER_ERROR;   
						return new ResponseEntity(respuestaDto, estatus);
				 }
			
				 int absolutoOrden = Math.abs(orderIn);
				 //				String ref = "u.ref";	
				//	String namecargo = "p.name";
				 switch (absolutoOrden) { 
				    case 1:  //ordena por name ascendente
				    	
				    	QueryTotal = QueryTotal + " ORDER BY " + name + ordena;
				     break;
				    case 2://ordena por status ascendente
				    	
				    	QueryTotal = QueryTotal + " ORDER BY " + status + ordena;
				     break;
                     case 3://ordena por status ascendente
				    	
				    	QueryTotal = QueryTotal + " ORDER BY " + namecargo + ordena;
				     break;
				     
                     case 4://ordena por status ascendente
 				    	
 				    	QueryTotal = QueryTotal + " ORDER BY " + ref + ordena;
 				     break;
 				     
                     case 99://ordena por status ascendente
 				    	
 				    	QueryTotal = QueryTotal + " ORDER BY " + id_wor + ordena;
 				     break;
				    
				   }
				 
				   TypedQuery<WorkersRequestDto2> params= entityManager.createQuery(QueryTotal, WorkersRequestDto2.class);
				      params.setFirstResult(offsetIn);
				      params.setMaxResults(numofrecordsIn);
				      
				      List<WorkersRequestDto2> listacompleta = params.getResultList();
				   
			    	   List<WorkersDto> listasWorkers = new ArrayList<>();
			    	   detalleWorkers = new WorkersDto();
			    	   //Se de be hacer el ciclo para poder llenar el objeto de la descripcion del estatus
			    	   for(WorkersRequestDto2 suppliers : listacompleta) {
			    		   
			    		   detalleCargo = new StatusDto();
			    		 
			    		   detalleStatus = new StatusDto();
			    		   detalleWorkers.setId(suppliers.getId());
			    		   detalleWorkers.setName(suppliers.getName());			    	   			    	  			    	   
				    	   detalleStatus.setId(suppliers.getStatus());
				    	   detalleStatus.setName(suppliers.getEstatus());
				    	   
				    	   detalleCargo.setId(suppliers.getIdcargo());
				    	   detalleCargo.setName(suppliers.getNamecargo());
				    	   
				    	   detalleWorkers.setRef(suppliers.getRef());
				    	   
				    	   detalleWorkers.setPosition(detalleCargo);					     
				    	   detalleWorkers.setStatus(detalleStatus);
				    	   
				    	   listasWorkers.add(detalleWorkers);
				    	   detalleWorkers = new WorkersDto();
			    	   }
			    	
			    	   
	      	    	 	detallePrivilege = new PrivilegesAllDto();
	      	    	 	
	      	    	   boolean tieneView = rolesPrivilegesRepository.existsByRolidAndPrivilegeid(idrol,420);
					   boolean tieneUpdate = rolesPrivilegesRepository.existsByRolidAndPrivilegeid(idrol,421);
					   boolean tieneAdd = rolesPrivilegesRepository.existsByRolidAndPrivilegeid(idrol,422);
					   boolean tieneDelete = rolesPrivilegesRepository.existsByRolidAndPrivilegeid(idrol,423);
					   //existsByRolidAndPrivilegeid
					   
	      	    	 	detallePrivilege.setView(tieneView);
			    	  	detallePrivilege.setUpdate(tieneUpdate);		    	  
			    	  	detallePrivilege.setAdd(tieneAdd);
			    	  	detallePrivilege.setDelete(tieneDelete);
			    	
			    	  	workersResponseDto.setNumofrecords(cuantosregistro);
			           //paramsResponseDto.setValidthru(ValidThrufechaSalida);
			    	  	workersResponseDto.setSessionvalidthru(fechaComoCadena);		           
			    	  	workersResponseDto.setRecords(listasWorkers);
			    	  	workersResponseDto.setPrivileges(detallePrivilege);		      		   			
			  						           
	                return ResponseEntity.ok(workersResponseDto);
			
				
				///////////////////////////////codigo viejo////////////////////////////////////////////
																      
			}catch (Exception e) {
	            // Manejo de excepciones
				respuesta= new RespuestaDto("Error interno del servidor", false);
				estatus=HttpStatus.INTERNAL_SERVER_ERROR;            
	        } finally {
		        if (entityManager != null && entityManager.isOpen()) {
		            entityManager.close();
		        }
		    }
			
			return new ResponseEntity(respuesta, estatus);
		
		}
		
		
//		@PostMapping("/workers")
		@GetMapping("/workers/{workerid}")
		public ResponseEntity<?> getOneWorkers(HttpServletRequest request, @PathVariable("workerid") final Integer workerid)
				throws ParseException {
			RespuestaDto respuesta = new RespuestaDto("", false);
			HttpStatus estatus = HttpStatus.FORBIDDEN;
			WorkerEntryResponseDto workersEntryResponseDto = new WorkerEntryResponseDto();
		//	ParamsDto detalleParams;
			WorkersDto detalleWorkers;
			StatusDto detalleStatus;
			StatusDto detalleCargo;
			PrivilegesAllDto detallePrivilege;
		     
		     Long cuantosregistro = (long) 0;
		     List<PrivilegesAllDto> listasPrivelege = new ArrayList<>();
			 
			 String sessionid = request.getHeader("Authorization");
			  Date fecha = new Date();
			    SimpleDateFormat  formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		        String dataFormattata = formatter.format(fecha);
		        Date fechaDate = formatter.parse(dataFormattata);
		        AuditRequestDto  auditDto=new AuditRequestDto();
		       		        		     		    
		        
		   	  String searchIn = "";
		     // String searchModule = "";
			  int searchStatus = 0;
			  int idrol;
			  String contentIn = "";
			 
			  String fechaComoCadena;
			 int orderIn = 0;
			 int offsetIn = 0;
			 int numofrecordsIn = 0;
			 Optional<Params> deSessDuration=paramsRepository.findByParamname("SESSION_DURATION");
			 String SessionDuration=deSessDuration.get().getValue();
			 int duracionSession = Integer.parseInt(SessionDuration);
			 Date fecha2 = new Date();
			 
			 
				if (sessionid==null) {
					String var = "";
					boolean bloked = false;
					RespuestaDto respuestaDto = new RespuestaDto(var, bloked);
					respuestaDto.setBlocked(bloked);
					respuestaDto.setMsg("Sesión expirada o inválida");
					//Error 400
					return new ResponseEntity(respuestaDto, HttpStatus.BAD_REQUEST);
				} else   {
					 
					   sessionid = sessionid.substring(7);
					   Optional<Users> encontreSessionUsuario =usersRepository.getBySessionid(sessionid);
					//   String usuarioIN = encontreSessionUsuario.get().getUsr();
					 //  int position = usuarioIN.indexOf('('); 
					   
					   if (encontreSessionUsuario.isPresent()) {
						   
						   Date FechaReg = encontreSessionUsuario.get().getValidthru(); 
						   //Llamada a la funcion que validad el tiempo de Session, retorna la fecha sumandole el tiempo de session activa, y vacio si no esta activa
						   

						    fechaComoCadena  = securityService.consultarSessionActiva(FechaReg,fecha2,encontreSessionUsuario.get().getId());

						   
						    if (fechaComoCadena=="") {
							   
							   
							   
							   String var = "";
								boolean bloked = false;
								RespuestaMsgDto respuestaDto = new RespuestaMsgDto(var);
								//respuestaDto.setBlocked(bloked);
								respuestaDto.setMsg("Sesión expirada o inválida"); 
								return new ResponseEntity(respuestaDto, HttpStatus.UNAUTHORIZED);
							   
						    }
						   
						   // Este proceso permite obtener un listado de los empleados. (Priv 420)
						   Roles roles = encontreSessionUsuario.get().getRolid();
						   idrol = roles.getId();
						   int rolisvalid = auditRepository.getCantbyRolAndPrivi(idrol, 420);
						   
						   if (rolisvalid==0) {
							   
							   String var = "";
								boolean bloked = false;
								RespuestaMsgDto respuestaDto = new RespuestaMsgDto(var);
								//respuestaDto.setBlocked(bloked);
								respuestaDto.setMsg("No tiene los Privilegios"); 
								return new ResponseEntity(respuestaDto, HttpStatus.FORBIDDEN);
								
						   }
							  
					 } else {
							String var = "";
							boolean bloked = false;
							RespuestaDto respuestaDto = new RespuestaDto(var, bloked);
							respuestaDto.setBlocked(bloked);
							respuestaDto.setMsg("Sesión expirada o inválida");
							//Error 400
							return new ResponseEntity(respuestaDto, HttpStatus.UNAUTHORIZED);
					 }
				}
				
				
			
			try {
				
				
			//	String SentenciaBase = "SELECT new com.dacrt.SBIABackend.dto.requestDto.WorkersRequestDto (u.id,u.name,u.status,CASE WHEN u.status = 1 then 'Activo' ELSE 'Inactivo' END AS estatus,u.ref,p.id AS idcargo,p.name AS namecargo)"
				//		+ " FROM Workers u,Positions p  WHERE p.id = u.positionid  and u.id = " + workerid;
				String SentenciaBase = "SELECT new com.dacrt.SBIABackend.dto.requestDto.WorkersRequestDto (u.id,u.name,u.status,CASE WHEN u.status = 1 then 'Activo' ELSE 'Inactivo' END AS estatus,u.ref,p.id AS idcargo,p.name AS namecargo,pu.id)"
						+ " FROM Workers u,Positions p,Positionunits pu  WHERE pu.id = u.positionunitid and pu.positionid = p.id   and u.id = " + workerid;
				
			
				
				String QueryTotal = "";
				String name = "u.name";
				String status = "u.status";				
				String lowername = "LOWER(u.name)";
				String LowerSearch = searchIn.toLowerCase();
														 								 				
				 
				   TypedQuery<WorkersRequestDto> params= entityManager.createQuery(SentenciaBase, WorkersRequestDto.class);
				    //  params.setFirstResult(offsetIn);
				    //  params.setMaxResults(numofrecordsIn);
				      
				      List<WorkersRequestDto> listacompleta = params.getResultList();
				   
			    	   List<WorkersDto> listasWorkers = new ArrayList<>();
			    	   detalleWorkers = new WorkersDto();
			    	   //Se de be hacer el ciclo para poder llenar el objeto de la descripcion del estatus
			    	   for(WorkersRequestDto suppliers : listacompleta) {
			    		   detalleWorkers = new WorkersDto();
			    		 
			    		   detalleStatus = new StatusDto();
			    		   detalleCargo = new StatusDto();
			    		   detalleWorkers.setId(suppliers.getId());
			    		   detalleWorkers.setName(suppliers.getName());			    	   			    	  			    	   
				    	   detalleStatus.setId(suppliers.getStatus());
				    	   detalleStatus.setName(suppliers.getEstatus());
				    	   
				    	   detalleCargo.setId(suppliers.getIdcargo());
				    	   detalleCargo.setName(suppliers.getNamecargo());
				    	   detalleWorkers.setRef(suppliers.getRef());
				    	   detalleWorkers.setPositionunitid(suppliers.getPositionunitid());
				    	   detalleWorkers.setStatus(detalleStatus);
				    	   detalleWorkers.setPosition(detalleCargo);
				    	   
				    	 //  listasWorkers.add(detalleWorkers);
			    	   }
			    	
			    	
			    	
			    	   workersEntryResponseDto.setEntry(detalleWorkers);
			               		   			
			  						           
	                return ResponseEntity.ok(workersEntryResponseDto);
			
				
				///////////////////////////////codigo viejo////////////////////////////////////////////
																      
			}catch (Exception e) {
	            // Manejo de excepciones
				respuesta= new RespuestaDto("Error interno del servidor", false);
				estatus=HttpStatus.INTERNAL_SERVER_ERROR;            
	        } finally {
		        if (entityManager != null && entityManager.isOpen()) {
		            entityManager.close();
		        }
		    }
			
			return new ResponseEntity(respuesta, estatus);
		
		}
		
		//workers/workerid
		
	@PostMapping("/workers/{workerid}")
	public ResponseEntity<ParamsResponseDto> workerUpdate(HttpServletRequest request,@RequestBody WorkersRequestBodyDto datosWorker,@PathVariable("workerid") final Integer workerid) throws ParseException {
			
			
			RespuestaValueDto respuestaValueDto;
			RespuestaMsgDto respuesta = new RespuestaMsgDto("");
			HttpStatus estatus = HttpStatus.FORBIDDEN;
			ParamsResponseDto paramsResponseDto = new ParamsResponseDto();
			ParamsDto detalleParams;
			PrivilegesDto detallePrivilege;
		     List<ParamsDto> listasParams = new ArrayList<>();
		     List<PrivilegesDto> listasPrivelege = new ArrayList<>();
		     
			 int idparametro = workerid;
			 
			 int valor = idparametro;
			 String sessionid = request.getHeader("Authorization");
			  Date fecha = new Date();
			    SimpleDateFormat  formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		        String dataFormattata = formatter.format(fecha);
		        Date fechaDate = formatter.parse(dataFormattata);
		        AuditRequestDto  auditDto=new AuditRequestDto();
		        Optional<Users> encontreSessionUsuario;    	       	  		
			   Date fecha2 = new Date();
			   Calendar calendar = Calendar.getInstance();
		
			 
				if (sessionid==null) {
					String var = "";
					boolean bloked = false;
					RespuestaMsgDto respuestaDto = new RespuestaMsgDto(var);
					//respuestaDto.setBlocked(bloked);
					respuestaDto.setMsg("Llamada al servicio malformado");
					//Error 400
					return new ResponseEntity(respuestaDto, HttpStatus.BAD_REQUEST);
				} else   {
					 
					   sessionid = sessionid.substring(7);
					   encontreSessionUsuario =usersRepository.getBySessionid(sessionid);
				       String fechaComoCadena;
					   
					   if (encontreSessionUsuario.isPresent()) {
						   
						   Date FechaReg = encontreSessionUsuario.get().getValidthru(); 
	  					   //Llamada a la funcion que validad el tiempo de Session, retorna la fecha sumandole el tiempo de session activa, y vacio si no esta activa
	  					   
	  					  //  fechaComoCadena  = securityService.consultarSessionActiva(FechaReg,fecha2);
	  					   fechaComoCadena  = securityService.consultarSessionActiva(FechaReg,fecha2,encontreSessionUsuario.get().getId());
	  					    if (fechaComoCadena=="") {
	  						   
	  						   
	  						   
	  						   String var = "";
	  							boolean bloked = false;
	  							RespuestaMsgDto respuestaDto = new RespuestaMsgDto(var);
	  							//respuestaDto.setBlocked(bloked);
	  							respuestaDto.setMsg("Sesión expirada o inválida"); 
	  							return new ResponseEntity(respuestaDto, HttpStatus.UNAUTHORIZED);
	  						   
	  					    }
	  					    
                     String Salida = usersService.verificarCaracteresValidosConRegex(datosWorker.getName());
	  					  
	  					  if (Salida=="NOOK") {
	  						  String var = "";
	  							boolean bloked = false;
	  							RespuestaMsgDto respuestaDto = new RespuestaMsgDto(var);
	  							//respuestaDto.setBlocked(bloked);
	  							respuestaDto.setMsg("Caracteres no permitidos en la busqueda"); 
	  							return new ResponseEntity(respuestaDto, HttpStatus.BAD_REQUEST);
	  					  }
	  					  
	  	                 String SalidaDsc = usersService.verificarCaracteresValidosConRegex(datosWorker.getRef());
	  					  
	  					  if (SalidaDsc=="NOOK") {
	  						  String var = "";
	  							boolean bloked = false;
	  							RespuestaMsgDto respuestaDto = new RespuestaMsgDto(var);
	  							//respuestaDto.setBlocked(bloked);
	  							respuestaDto.setMsg("Caracteres no permitidos en la busqueda"); 
	  							return new ResponseEntity(respuestaDto, HttpStatus.BAD_REQUEST);
	  					  }
	  					  
	  					   
						 //Actualiza o Incluye un registro de un usuario. (Si el unitid es 0 se incluye). (priv 111 MOD Y 112 INC)
						   if (idparametro==0) {
							   //el permiso es el 632
							   Roles roles = encontreSessionUsuario.get().getRolid();
							   int idrol = roles.getId();
							   int rolisvalid = auditRepository.getCantbyRolAndPrivi(idrol, 422);
							 //  rolisvalid = 3;
							   if (rolisvalid==0) {
								   
								   String var = "";
									boolean bloked = false;
									RespuestaMsgDto respuestaDto = new RespuestaMsgDto(var);
									//respuestaDto.setBlocked(bloked);
									respuestaDto.setMsg("No tiene los Privilegios"); 
									return new ResponseEntity(respuestaDto, HttpStatus.FORBIDDEN);
								   
							     }
							
							   
						   } else {
						   
						   Roles roles = encontreSessionUsuario.get().getRolid();
						   int idrol = roles.getId();
						   int rolisvalid = auditRepository.getCantbyRolAndPrivi(idrol, 421);
						  //rolisvalid = 3;
						   if (rolisvalid==0) {
							   
							   String var = "";
								boolean bloked = false;
								RespuestaMsgDto respuestaDto = new RespuestaMsgDto(var);
								//respuestaDto.setBlocked(bloked);
								respuestaDto.setMsg("No tiene los Privilegios"); 
								return new ResponseEntity(respuestaDto, HttpStatus.FORBIDDEN);
							   
						     }
						   } 
						   
						  // boolean existeCargo = positionsRepository.existsById(datosWorker.getPositionid());
						   Positionunits PositionUnisObjt = positionunitsRepository.getById(datosWorker.getPositionunitid());
						   int idcargo = PositionUnisObjt.getPositionid();
						   boolean existeCargo = positionsRepository.existsById(idcargo);
						   
						   if  (!existeCargo) {	
							   
							  
							    
							    	String var = "";
							    	RespuestaMsgDto respuestaDto = new RespuestaMsgDto(var);
									//respuestaDto.setBlocked(bloked);
									respuestaDto.setMsg("Registro No encontrado");
									//Error 400
									return new ResponseEntity(respuestaDto, HttpStatus.BAD_REQUEST);
							    
						   }
                       
						 
							
						   
						   if (idparametro==0) {
							   
	                       if  (datosWorker.getRef()!= "" ) {	
								   
								   //boolean existeRef = unitsRepository.existsByRef(datosUnidad.getRef());
								   String Query1 = "SELECT name FROM main.workers WHERE LOWER(ref) = " + "'" + datosWorker.getRef().toString().toLowerCase() + "'" ;
								   Long cuantosregistroref = (long) jdbcTemplate.queryForList(Query1).size();
								   
								    if (cuantosregistroref>0) {
								    	String var = "";
								    	RespuestaMsgDto respuestaDto = new RespuestaMsgDto(var);
										//respuestaDto.setBlocked(bloked);
										respuestaDto.setMsg("Registro Duplicado");
										//Error 400
										return new ResponseEntity(respuestaDto, HttpStatus.CONFLICT);
								    }
							   }
	                       
	                       if  (datosWorker.getName()!= "" ) {	
							   
							   //boolean existeName = unitsRepository.existsByName(datosUnidad.getName());
	                    	   String Query2 = "SELECT name FROM main.workers WHERE LOWER(name) = " + "'" + datosWorker.getName().toLowerCase() + "'";
	                    	   
							   Long cuantosregistroname = (long) jdbcTemplate.queryForList(Query2).size();
							   
							    if (cuantosregistroname>0) {
							    	String var = "";
							    	RespuestaMsgDto respuestaDto = new RespuestaMsgDto(var);
									//respuestaDto.setBlocked(bloked);
									respuestaDto.setMsg("Registro Duplicado");
									//Error 40
									return new ResponseEntity(respuestaDto, HttpStatus.CONFLICT);
							    }
						   }
						                     						   
						
						
							   
						   } else {
							   boolean existeWorker = workersRepository.existsById(idparametro);
							   if (!existeWorker) {
						    	    String var = "";
									boolean bloked = false;
									RespuestaMsgDto respuestaDto = new RespuestaMsgDto(var);
									//respuestaDto.setBlocked(bloked);
									respuestaDto.setMsg("Registro no encontrado"); 
									return new ResponseEntity(respuestaDto, HttpStatus.NOT_FOUND);
						    	  
						      } 
						    	  						      								  												   									      
							   
						   }
							   
						       
				
					   
					 } else {
							String var = "";
							boolean bloked = false;
							RespuestaMsgDto respuestaDto = new RespuestaMsgDto(var);
							//respuestaDto.setBlocked(bloked);
							respuestaDto.setMsg("Sesión expirada o inválida");
							//Error 400
							return new ResponseEntity(respuestaDto, HttpStatus.UNAUTHORIZED);
					 }
				}
				
				
			
			try {
				
				
				Workers tipoWorkers2=null;
				//Workers tipoUnits=null;
				Workers tipoWorker=null;
				Workers tipoWorkerNew2=null;
				Optional<Workers> nuevoinsertado = null;
				//Userunits tipoUsersUnits = new Userunits();	
				//Unitprocesses tipoUsersUnits = new Unitprocesses();
				
				if (idparametro==0) {
					//Users tipoUsersNew = new Users();
					Workers tipoWorkersNew = new Workers();
					
					
					//Workers
					//datosWorker
					tipoWorkersNew.setStatus(datosWorker.getStatus());
					tipoWorkersNew.setModifiedat(fechaDate);
					tipoWorkersNew.setCreatedat(fechaDate); 
					tipoWorkersNew.setName(datosWorker.getName());
					tipoWorkersNew.setRef(datosWorker.getRef());
					Positionunits relaposition = positionunitsRepository.getById(datosWorker.getPositionunitid());
					tipoWorkersNew.setPositionunitid(relaposition);
					
				
			        
					tipoWorkerNew2=workersService.addIdWorkers(tipoWorkersNew);
			        tipoWorkers2 = tipoWorkerNew2;
			        nuevoinsertado = workersRepository.findByName(datosWorker.getName());
					int idInsertado =  nuevoinsertado.get().getId();
					int idmensaje = idInsertado;

				    //////////////////////////INSERCION BLOQUE DE AUDITORIA///////////////////
				     String module = "Empleados";
				     //String Descmodule = "Actualización de parametro del Sistema con id: " + parmid  ;
				     String Descmodule = "Se agregó el empleado: " + datosWorker.getName() + " con Id:" + idInsertado ;
				    
			         auditDto.setIpaddr(HttpReqRespUtils.getClientIpAddressIfServletRequestExist());			        
			         
			         String singo1 = "(";
			         String singo2 = ")";
			         String usryemail = encontreSessionUsuario.get().getUsr().concat(" ").concat(singo1).concat(encontreSessionUsuario.get().getEmail().concat(singo2));
			         auditDto.setUserref(usryemail);
			         auditDto.setModule(module);
			         auditDto.setDesc(Descmodule);
			         auditDto.setCreatedat(fechaDate);
			 		   usersService.registrarAuditSesion(auditDto); 
			 		   
			 		
						respuestaValueDto= new RespuestaValueDto(idmensaje);
						estatus=HttpStatus.OK;
						return new ResponseEntity(respuestaValueDto, estatus); 
		         

				} else {
					 //tipoUsers = usersService.getUsersByid(idparametro);
					    /// tipoUnits = workersService.getWorkersByid(idparametro);
					     tipoWorker = workersService.getWorkersByid(idparametro);
					    // Positions relaposition = positionsRepository.getById(datosWorker.getPositionid());
					 
					    tipoWorker.setStatus(datosWorker.getStatus());
						//tipoUsers.setUsr(datosUsuario.getUsr());

						String work1 = tipoWorker.getName();
						String work2 = datosWorker.getName();
						if (work1.equals(work2)){
							String Validausers = "El empleado es el mismo";
					    	
						} else {
					
						 String QueryTotal = "SELECT name FROM main.workers WHERE LOWER(name) = " + "'" + datosWorker.getName().toString().toLowerCase() + "'" ;
						 Long validaWork = (long) jdbcTemplate.queryForList(QueryTotal).size();
						 
		                if (validaWork>0) {
							
							String var = "";
							//boolean bloked = false;
							RespuestaMsgDto respuestaDto = new RespuestaMsgDto(var);
							//respuestaDto.setBlocked(bloked);
							respuestaDto.setMsg("Registro Duplicado");
							//Error 400
							return new ResponseEntity(respuestaDto, HttpStatus.CONFLICT);
							
						} else {
							tipoWorker.setName(datosWorker.getName());
						}
					}																
					
						//tipoUnits.setDsc(datosUnidad.getDsc());	
						Positionunits relaposition = positionunitsRepository.getById(datosWorker.getPositionunitid());
						tipoWorker.setPositionunitid(relaposition);
						tipoWorker.setModifiedat(fechaDate);	
						String ref1 = tipoWorker.getRef();
						String ref2 = datosWorker.getRef();
						
						if (ref2=="") {
							tipoWorker.setRef(datosWorker.getRef());
						} else {
							 
							//if (ref1==null || ref1=="") { 
							if (ref1 == null || ref1.isEmpty()) { 
								 String QueryTotal2 = "SELECT name FROM main.workers WHERE LOWER(ref) = " + "'" + datosWorker.getRef().toString().toLowerCase() + "'" ;
							       Long validaref = (long) jdbcTemplate.queryForList(QueryTotal2).size();
						   	    if (validaref>0) {
								
								
								String var = "";
								//boolean bloked = false;
								RespuestaMsgDto respuestaDto = new RespuestaMsgDto(var);
								//respuestaDto.setBlocked(bloked);
								respuestaDto.setMsg("Registro Duplicado");
								//Error 400
								return new ResponseEntity(respuestaDto, HttpStatus.CONFLICT);
								
							  } else {
								  tipoWorker.setRef(datosWorker.getRef());
						     }
								
								
							} else {
						       if (ref1.equals(ref2)){
							      String Validacorreo = "La ref es la misma";
					    	
						         } else {
							//boolean validaref = unitsRepository.existsByRef(datosUnidad.getRef());
							       String QueryTotal2 = "SELECT name FROM main.workers WHERE LOWER(ref) = " + "'" + datosWorker.getRef().toString().toLowerCase() + "'" ;
							       Long validaref = (long) jdbcTemplate.queryForList(QueryTotal2).size();
						   	    if (validaref>0) {
								
								
								String var = "";
								//boolean bloked = false;
								RespuestaMsgDto respuestaDto = new RespuestaMsgDto(var);
								//respuestaDto.setBlocked(bloked);
								respuestaDto.setMsg("Registro Duplicado");
								//Error 400
								return new ResponseEntity(respuestaDto, HttpStatus.CONFLICT);
								
							  } else {
								  tipoWorker.setRef(datosWorker.getRef());
						     }
							
					    	}
							}  ///if (ref1=="") 
						}				///if (ref2=="") {												
			          
						tipoWorkers2=workersService.addIdWorkers(tipoWorker);
						
					    //////////////////////////INSERCION BLOQUE DE AUDITORIA///////////////////
					     String module = "Empleados";
					     //String Descmodule = "Actualización de parametro del Sistema con id: " + parmid  ;
					     String Descmodule = "Se actualizó el empleado: "+ datosWorker.getName() + " con Id:" + workerid ;
					    
				         auditDto.setIpaddr(HttpReqRespUtils.getClientIpAddressIfServletRequestExist());			        
				         
				         String singo1 = "(";
				         String singo2 = ")";
				         String usryemail = encontreSessionUsuario.get().getUsr().concat(" ").concat(singo1).concat(encontreSessionUsuario.get().getEmail().concat(singo2));
				         auditDto.setUserref(usryemail);
				         auditDto.setModule(module);
				         auditDto.setDesc(Descmodule);
				         auditDto.setCreatedat(fechaDate);
				 		   usersService.registrarAuditSesion(auditDto); 
				 		  //////////////////////////INSERCION BLOQUE DE AUDITORIA///////////////////	
				 		   int idmensaje = workerid;
				 		   respuestaValueDto= new RespuestaValueDto(idmensaje);
							estatus=HttpStatus.OK;
							return new ResponseEntity(respuestaValueDto, estatus); 
			         
			      
				      }
			
			} catch (Exception e) {
	            // Manejo de excepciones
				respuesta= new RespuestaMsgDto("Error interno del servidor");
				estatus=HttpStatus.INTERNAL_SERVER_ERROR;            
	        } finally {
				if (entityManager != null && entityManager.isOpen()) {
					entityManager.close();
				}
			}
			
			return new ResponseEntity(respuesta, estatus);
		
		}
	
	
	@DeleteMapping("/workers/{workerid}")
	public ResponseEntity<?> borrarWorkers(HttpServletRequest request, @PathVariable("workerid") final Integer workerid)
			throws ParseException {
		RespuestaMsgDto respuesta = new RespuestaMsgDto("");
		HttpStatus estatus = HttpStatus.FORBIDDEN;
		RoleDto detalleRoles;
		PrivilegesAllDto detallePrivilege;
		
		String var = "";
		boolean bloked = false;
		RespuestaDto respuestaDto = new RespuestaDto(var, bloked);
		String sessionid = request.getHeader("Authorization");
		Date fecha = new Date();
		SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String dataFormattata = formatter.format(fecha);
		Date fechaDate = formatter.parse(dataFormattata);
		AuditRequestDto auditDto = new AuditRequestDto();
		RespuestaValueDto respuestaValueDto;
		String searchIn = "";


		Optional<Params> deSessDuration = paramsRepository.findByParamname("SESSION_DURATION");
		String SessionDuration = deSessDuration.get().getValue();
		int duracionSession = Integer.parseInt(SessionDuration);
		Date fecha2 = new Date();
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(fecha2); // tuFechaBase es un Date;
		// calendar.add(Calendar.MINUTE, minutosASumar); //minutosASumar es int.
		calendar.add(Calendar.MINUTE, duracionSession); // horasASumar es int.
		// lo que más quieras sumar
		Date ValidThrufechaSalida = calendar.getTime(); // Y ya tienes la fecha sumada.

		if (sessionid == null) {
			respuesta.setMsg("Llamada al servicio malformado");
			estatus=HttpStatus.BAD_REQUEST;
			return new ResponseEntity(respuesta, estatus);
		} else {
			sessionid = sessionid.substring(7);
			Optional<Users> encontreSessionUsuario = usersRepository.getBySessionid(sessionid);

			if (encontreSessionUsuario.isPresent()) {
				//Eliminar un registro de un usuario. (priv 633)

				String fechaComoCadena;
				   Date FechaReg = encontreSessionUsuario.get().getValidthru(); 
					   //Llamada a la funcion que validad el tiempo de Session, retorna la fecha sumandole el tiempo de session activa, y vacio si no esta activa
					   
					   // fechaComoCadena  = securityService.consultarSessionActiva(FechaReg,fecha2);
					    fechaComoCadena  = securityService.consultarSessionActiva(FechaReg,fecha2,encontreSessionUsuario.get().getId());
					    if (fechaComoCadena=="") {
						   
						   
						   
						    String var2 = "";
							boolean bloked2 = false;
							RespuestaMsgDto respuestaDto2 = new RespuestaMsgDto(var2);
							//respuestaDto.setBlocked(bloked);
							respuestaDto2.setMsg("Sesión expirada o inválida"); 
							return new ResponseEntity(respuestaDto, HttpStatus.UNAUTHORIZED);
						   
					    }
					    
				  Roles roles = encontreSessionUsuario.get().getRolid();
				   int idrol = roles.getId();
				   int rolisvalid = auditRepository.getCantbyRolAndPrivi(idrol, 423);
				   //rolisvalid = 3;
				   if (rolisvalid==0) {
					  
					   
						//boolean bloked = false;
						RespuestaMsgDto respuestaPrivDto = new RespuestaMsgDto(var);
						//respuestaDto.setBlocked(bloked);
						respuestaPrivDto.setMsg("No tiene los Privilegios"); 
						return new ResponseEntity(respuestaPrivDto, HttpStatus.FORBIDDEN);
						
				   }
				   
				
				try {
					
					if (workersRepository.existsById(workerid)) {
						
						  Optional<Workers> uniDelete = workersRepository.findById(workerid);
						   String module = "Empleados";
						     String Descmodule = "Se eliminó el empleado: " + uniDelete.get().getName() + " con Id: " + uniDelete.get().getId();
						    
					         auditDto.setIpaddr(HttpReqRespUtils.getClientIpAddressIfServletRequestExist());
					       
					         String singo1 = "(";
					         String singo2 = ")";
					         String usryemail = encontreSessionUsuario.get().getUsr().concat(" ").concat(singo1).concat(encontreSessionUsuario.get().getEmail().concat(singo2));
					         auditDto.setUserref(usryemail);
					         auditDto.setModule(module);
					         auditDto.setDesc(Descmodule);
					         auditDto.setCreatedat(fechaDate);
					 		   usersService.registrarAuditSesion(auditDto); 
						
						// Borro el rol boolean existeUsers = ;
						int valor = 0;
						try {
						//usersRepository.deleteusersbyid(userid,fechaDate,valor);	
							workersRepository.deleteWorkersbyid(workerid);	
						    respuestaValueDto= new RespuestaValueDto(workerid);
						
						
						estatus=HttpStatus.OK;
						return new ResponseEntity(respuestaValueDto, estatus);
						} catch (Exception e) {// Error Interno
							respuesta.setMsg("Error interno del servidor -conflicto. ");
							estatus=HttpStatus.CONFLICT;
							return new ResponseEntity(respuesta, estatus);
						} 
					} else {// Registro no encontrado
						respuesta.setMsg("Registro no encontrado");
						estatus=HttpStatus.NOT_FOUND;
						return new ResponseEntity(respuesta, estatus);
						
					}

				} catch (Exception e) {// Error Interno
					// Manejo de excepciones
					respuesta.setMsg("Error interno del servidor");
					estatus=HttpStatus.INTERNAL_SERVER_ERROR;
					return new ResponseEntity(respuesta, estatus);
				} finally {
					if (entityManager != null && entityManager.isOpen()) {
						entityManager.close();
					}
				}
			} else {
				respuesta.setMsg("Sesión expirada o inválida");
				estatus=HttpStatus.UNAUTHORIZED;
				return new ResponseEntity(respuesta, estatus);
				
			}

			
		}
		
	}	
		
		public String arrayAParentesis(List<Integer> lista) {
			
		    if (lista == null || lista.isEmpty()) {
		        return "()";
		    }
		    StringBuilder sb = new StringBuilder("(");
		    for (int i = 0; i < lista.size(); i++) {
		        sb.append(lista.get(i));
		        if (i < lista.size() - 1) {
		            sb.append(", ");
		        }
		    }
		    sb.append(")");
		    return sb.toString();
		}


}