package com.dacrt.SBIABackend.service;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

import com.dacrt.SBIABackend.dto.AppTypeDto;
import com.dacrt.SBIABackend.dto.AppyesnoDto;
import com.dacrt.SBIABackend.dto.RankingAplicacionesRequestDto;
import com.dacrt.SBIABackend.dto.RankingAplicacionesResponseDto;

@Service
public class RankingAplicacionesService {
Logger logger = LoggerFactory.getLogger(RankingAplicacionesService.class);
	
	@PersistenceContext
	private EntityManager entityManager;
	
	public List<RankingAplicacionesResponseDto> getRanking(RankingAplicacionesRequestDto ranking) {
		List<RankingAplicacionesResponseDto> listado=new ArrayList();
		Query query3;
		Query query4;
		
		List<Object[]> resultadosTypes;
		List<Object[]> resultadosTypes2;
		
		AppTypeDto appTypeDto = new AppTypeDto();
		AppyesnoDto appTypeYesNoDto = new AppyesnoDto();
		
		List<AppTypeDto> tipoAppList = new ArrayList();
		List<AppyesnoDto> tipoAppYesnoList = new ArrayList();
		
		String QueryTypes = "SELECT CAST(elem AS TEXT) " + "	FROM main.params pa, "
				+ "	jsonb_array_elements(CAST(pa.value AS jsonb)) AS elem "
				+ "	WHERE pa.paramname = 'APPS_TYPE' ";
		
		String QueryAppyesno = "SELECT CAST(elem AS TEXT) " + "	FROM main.params pa, "
				+ "	jsonb_array_elements(CAST(pa.value AS jsonb)) AS elem "
				+ "	WHERE pa.paramname = 'APPS_YESNO' ";
		
		query3 = entityManager.createNativeQuery(QueryTypes);

		resultadosTypes = query3.getResultList();
		JSONObject jsonObject;
		String jsonStringTipo = "";
		if (resultadosTypes.size() > 0) {
			for (Object tipos : resultadosTypes) {
				jsonStringTipo = (String) tipos; // Recupera el JSON como String
				jsonObject = new JSONObject(jsonStringTipo); // Convierte String a JSONObject
				// Extrae los valores del JSONObject
				String dsc = jsonObject.getString("dsc");
				String value = jsonObject.getString("value");

				appTypeDto.setDsc(dsc);
				appTypeDto.setValue(value);
				tipoAppList.add(appTypeDto);
				appTypeDto = new AppTypeDto();
			}
		}
		
		String QueryTypes2 = "SELECT CAST(elem AS TEXT) " + "	FROM main.params pa, "
				+ "	jsonb_array_elements(CAST(pa.value AS jsonb)) AS elem "
				+ "	WHERE pa.paramname = 'APPS_YESNO' ";
		
		query4 = entityManager.createNativeQuery(QueryTypes2);

		resultadosTypes2 = query4.getResultList();
		JSONObject jsonObject2;
		String jsonStringTipo2 = "";
		if (resultadosTypes2.size() > 0) {
			for (Object tipos2 : resultadosTypes2) {
				jsonStringTipo2 = (String) tipos2; // Recupera el JSON como String
				jsonObject2 = new JSONObject(jsonStringTipo2); // Convierte String a JSONObject
				// Extrae los valores del JSONObject
				String dsc = jsonObject2.getString("dsc");
				String value = jsonObject2.getString("value");

				appTypeYesNoDto.setDsc(dsc);
				appTypeYesNoDto.setValue(value);
				tipoAppYesnoList.add(appTypeYesNoDto);
				appTypeYesNoDto = new AppyesnoDto();
			}
		}
		
		
		return listado;
		
	}
}	
