package com.ejie.ab61.service.listados;

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

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.ejie.ab61.dao.listados.ListadosClienteDao;
import com.ejie.ab61.exceptions.Ab61Exception;
import com.ejie.ab61.model.listados.Listados;
import com.ejie.ab61.model.serviciosWeb.BusquedasWS;
import com.ejie.ab61.model.serviciosWeb.ParametrosWS;
import com.ejie.ab61.service.serviciosWeb.ServiciosWebService;
import com.ejie.x38.dto.JQGridRequestDto;

/**
 * ListadosServiceImpl  
 * 
 *  
 */

@Service(value = "listadosClienteService")
public class ListadosClienteServiceImpl implements ListadosClienteService {

	@Autowired
	private ListadosClienteDao listadosDao;
	@Autowired
	private ServiciosWebService serviciosWebService;

	/**
	 * Finds a single row in the Listados table.
	 *
	 * @param listados
	 *            Listados
	 * @return Listados
	 */
	public Listados find(Listados listados) {
		return (Listados) this.listadosDao.find(listados);
	}

	/**
	 * Finds rows in the Listados table using like.
	 *
	 * @param listados
	 *            Listados
	 * @param jqGridRequestDto
	 *            JQGridRequestDto
	 * @param startsWith
	 *            Boolean
	 * @return List<Listados>
	 */
	public List<Listados> findAllLike(Listados listados, JQGridRequestDto jqGridRequestDto, Boolean startsWith) {
		return (List<Listados>) this.listadosDao.findAllLike(listados, jqGridRequestDto, startsWith);
	}

	/**
	 * llama al webService que genera un XLS con las busquedas seleccionadas
	 * 
	 * @param listados
	 * @return string ruta fichero pif
	 * @throws Exception
	 */
	public String gerenarXLS(Listados listados, Integer idProcedimiento) throws Ab61Exception {
		List<BusquedasWS> listaBusquedas = new ArrayList<BusquedasWS>();
		if (null != listados && "" != listados.getResultado()) {
			// Separamos las diferentes busquedas
			String[] resultadoArray = listados.getResultado().split("&");
			// por cada busqueda separamos id y lista de parametros
			for (int i = 0; i < resultadoArray.length; i++) {
				String[] busquedaParametros = resultadoArray[i].split("#");
				if (busquedaParametros.length >= 1) {
					BusquedasWS busqueda = new BusquedasWS();
					busqueda.setIdBusqueda(Integer.parseInt(busquedaParametros[0]));
					if (busquedaParametros.length > 1) {
						String listaParametros = busquedaParametros[1];
						String[] listaParametrosArray = listaParametros.split(",");
						List<ParametrosWS> listaParam = new ArrayList<ParametrosWS>();
						for (int j = 0; j < listaParametrosArray.length; j++) {
							String[] idValParametro = listaParametrosArray[j].split("@");
							if (idValParametro.length > 1) {
								ParametrosWS parametro = new ParametrosWS();
								parametro.setIdParametro(Integer.parseInt(idValParametro[0]));
								parametro.setValor(idValParametro[1]);
								listaParam.add(parametro);
							}
						}
						busqueda.setParametros(listaParam);
					}
					listaBusquedas.add(busqueda);
				}
			}
		}

		return serviciosWebService.generarExcelListados(listados.getIdListado(), listaBusquedas, "ab61",
				idProcedimiento);
	}

	/**
	 * Finds rows in the Listados table using like.
	 *
	 * @param idProcedimiento
	 *            Integer
	 * 
	 * @return List<Listados>
	 */
	public List<Listados> findAllRelLisProByProc(Integer idProcedimiento) {
		return this.listadosDao.findAllRelLisProByProc(idProcedimiento);
	}
}
