package com.dacrt.SBIABackend.controler;

import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Optional;

import org.apache.commons.lang3.StringUtils;
import org.hibernate.mapping.Set;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PatchMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
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.dto.Mensaje;
/*import com.dacrt.SBIABackend.dto.requestDto.DetalleProcesoRequestDto;
import com.dacrt.SBIABackend.dto.requestDto.DetalleUnidadRequestDto;
import com.dacrt.SBIABackend.dto.requestDto.UbicacionesTiRequestDto;*/
import com.dacrt.SBIABackend.dto.requestDto.UnidadRequestDto;
/*import com.dacrt.SBIABackend.dto.responseDto.DetalleEvaluacionesResponseDto;
import com.dacrt.SBIABackend.dto.responseDto.DetalleUnidadResponseDto;
import com.dacrt.SBIABackend.dto.responseDto.ProcesoResponseDto;*/
import com.dacrt.SBIABackend.dto.responseDto.UnidadResponseDto;
/*import com.dacrt.SBIABackend.entity.Evaluaciones;
import com.dacrt.SBIABackend.entity.Maestroevaluacion;
import com.dacrt.SBIABackend.entity.Parametros;
import com.dacrt.SBIABackend.entity.Proceso;*/
import com.dacrt.SBIABackend.entity.Unidad;
import com.dacrt.SBIABackend.entity.UnidadAdscripcion;

/*import com.dacrt.SBIABackend.entity.Cargos;
import com.dacrt.SBIABackend.entity.UbicacionesTi;*/

/*import com.dacrt.SBIABackend.service.EvaluacionesService;
import com.dacrt.SBIABackend.service.MaestroevaluacionesService;
import com.dacrt.SBIABackend.service.ParametrosService;*/
//import com.dacrt.SBIABackend.service.UnidadAdscripcionService;
import com.dacrt.SBIABackend.service.UnidadService;
//import com.dacrt.SBIABackend.service.UbicacionesTiService;

@RestController
@RequestMapping("/unidades")
//@CrossOrigin(origins = "http://vpskromasys2.hostnetcom.com:8083")
@CrossOrigin(origins = "http://vpskromasys2.hostnetcom.com:8081")
public class UnidadControler {

	private final UnidadService unidadService;
	//private final EvaluacionesService evaluacionesService;
	//private final UnidadAdscripcionService unidadAdscripcionService;
	//private final ParametrosService parametrosService;
	//private final UbicacionesTiService ubicacionesTiService;
//	@Autowired
//	private final UnidadService unidadService;

	Logger logger = LoggerFactory.getLogger(UnidadControler.class);

	/*ZoneId panamaZoneId = ZoneId.of("America/Panama");
	ZonedDateTime nowInPanama = ZonedDateTime.now(panamaZoneId);
	Instant instant = nowInPanama.toInstant();
	java.sql.Date fechaActual=new java.sql.Date(instant.toEpochMilli());*/

	/*@Autowired
	public UnidadControler(UnidadService unidadService, UnidadAdscripcionService unidadAdscripcionService,
			ParametrosService parametrosService,
			EvaluacionesService evaluacionesService) {
		this.unidadService = unidadService;
		this.parametrosService = parametrosService;
		this.unidadAdscripcionService = unidadAdscripcionService;
		//.ubicacionesTiService = ubicacionesTiService;
		this.evaluacionesService = evaluacionesService;
	}*/
	@Autowired
	public UnidadControler(UnidadService unidadService) {
		
		this.unidadService = unidadService;
		//this.parametrosService = parametrosService;
		//.ubicacionesTiService = ubicacionesTiService;
		//this.evaluacionesService = evaluacionesService;
	}

	/*@GetMapping("/detail/{idUnidad}")
	public ResponseEntity<DetalleUnidadResponseDto> getUnidad(@PathVariable final Integer idUnidad) {

		if (!unidadService.existsById(idUnidad))
			return new ResponseEntity(new Mensaje("No existe el id " + idUnidad + " de unidad solicitado"),
					HttpStatus.NOT_FOUND);

		DetalleUnidadResponseDto unidadResponseDto = unidadService.getUnidadById(idUnidad);
		return new ResponseEntity<>(unidadResponseDto, HttpStatus.OK);
	}*/
	
	
	
	@GetMapping("/cantidadProcesos/{idUnidad}")
	public ResponseEntity<?> countProcesosPorUnidad(@PathVariable final  Integer idUnidad) {
		long cantidadProcesos = unidadService.countProcesosPorUnidad(idUnidad);
		return new ResponseEntity<>(cantidadProcesos, HttpStatus.OK);
	}
	
	/*@GetMapping("/listaUnidadProcesos/{idUnidad}")
	public ResponseEntity<?> listaProcesosPorUnidad(@PathVariable final  Integer idUnidad) {
		List<ProcesoResponseDto> procesoResponseDtos = unidadService.getProcesos(idUnidad);
		return new ResponseEntity<>(procesoResponseDtos, HttpStatus.OK);
	}*/
	
	/*@GetMapping("/cantidadUnidadesxcampana/{idCampana}")
	//public ResponseEntity<?> buscarRankingCanales() {
		public ResponseEntity<List<Vistatotalunidadesconevaluaciones>> buscarTotalUnidadesxCampana(@PathVariable final  Long idCampana) {
		List<Vistatotalunidadesconevaluaciones> vistatotalunidadesconevaluaciones = unidadService.buscarTotalUnidadesxCampana(idCampana);
		return new ResponseEntity<>(vistatotalunidadesconevaluaciones, HttpStatus.OK);
	}
	
	@GetMapping("/resumenporunidad/{idCampana}")
	//public ResponseEntity<?> buscarRankingCanales() {
		public ResponseEntity<List<VistaResumenPorUnidad>> buscarResumenunidadxCampana(@PathVariable final  Long idCampana) {
		List<VistaResumenPorUnidad> vistaResumenPorUnidad = unidadService.buscarResumenunidadxCampana(idCampana);
		return new ResponseEntity<>(vistaResumenPorUnidad, HttpStatus.OK);
	}
	
	@GetMapping("/listarpersonalContingUnidad/{idCampana}")
	//public ResponseEntity<?> buscarRankingCanales() {
		public ResponseEntity<List<VistaPersonalxDiadeContingencia>> buscarpersContingxUnidad(@PathVariable final  Long idCampana) {
		List<VistaPersonalxDiadeContingencia> vistaPersonalxDiadeContingencia = unidadService.buscarpersContingxUnidad(idCampana);
		return new ResponseEntity<>(vistaPersonalxDiadeContingencia, HttpStatus.OK);
	}
	
	@GetMapping("/listarpersonalContingUnidadtotales/{idCampana}")
	//public ResponseEntity<?> buscarRankingCanales() {
		public ResponseEntity<List<VistaPersoxDiadeContingenciaTotales>> buscarpersContingxUnidadTotales(@PathVariable final  Long idCampana) {
		List<VistaPersoxDiadeContingenciaTotales> vistaPersoxDiadeContingenciaTotales = unidadService.buscarpersContingxUnidadTotales(idCampana);
		return new ResponseEntity<>(vistaPersoxDiadeContingenciaTotales, HttpStatus.OK);
	}
	
	@GetMapping("/condipersonasclaves")
	public ResponseEntity<?> buscarPerClaves() {
		List<VistaCondiPersonasClaves> vistaCondiPersonasClaves = unidadService.buscarPerClaves();
		return new ResponseEntity<>(vistaCondiPersonasClaves, HttpStatus.OK);
	}
	
	@GetMapping("/condirecursosclaves")
	public ResponseEntity<?> buscarRecursosClaves() {
		List<VistaCondiRecursosClaves> vistaCondiRecursosClaves = unidadService.buscarRecursosClaves();
		return new ResponseEntity<>(vistaCondiRecursosClaves, HttpStatus.OK);
	}
	
	@GetMapping("/listarRecurostotales")
	public ResponseEntity<?> buscarRecursostotales() {
		List<VistaRecursosxDiadeConting> vistaRecursosxDiadeConting = unidadService.buscarRecursostotales();
		return new ResponseEntity<>(vistaRecursosxDiadeConting, HttpStatus.OK);
	}*/


	
	
	
/*	@GetMapping("/listarUnidadesAll")
	public ResponseEntity<?> buscarUnidadesAll() {
		List<VistaUnidadesAll> vistaUnidadesAll = unidadService.buscarUnidadesAll();
		return new ResponseEntity<>(vistaUnidadesAll, HttpStatus.OK);
	}*/


	
	
}
