/*
* Copyright 2021 E.J.I.E., S.A.
*
* Licencia con arreglo a la EUPL, Versión 1.1 exclusivamente (la «Licencia»);
* Solo podrá usarse esta obra si se respeta la Licencia.
* Puede obtenerse una copia de la Licencia en
*
* http://ec.europa.eu/idabc/eupl.html
*
* Salvo cuando lo exija la legislación aplicable o se acuerde por escrito,
* el programa distribuido con arreglo a la Licencia se distribuye «TAL CUAL»,
* SIN GARANT�?AS NI CONDICIONES DE NINGÚN TIPO, ni expresas ni implícitas.
* Véase la Licencia en el idioma concreto que rige los permisos y limitaciones
* que establece la Licencia.
*/
package com.ejie.ad74a.service.toolkit;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.ejie.ad74a.exceptions.ManagerErrors;
import com.ejie.ad74a.model.MotivosBaja;
import com.ejie.ad74a.model.Parameter;
import com.ejie.ad74a.model.Parameters;
import com.ejie.ad74a.model.Solicitantes;
import com.ejie.ad74a.service.SolicitantesService;
import com.ejie.ad74a.service.interoperabilidad.InteroperabilidadService;
import com.ejie.ad74a.util.comun.Utilidades;
import com.ejie.ad74a.util.comun.UtilidadesXML;
import com.ejie.ad74a.util.constantes.MotivoBajaEnum;

/**
 * EntidadesServiceImpl generated by UDA, 21-jul-2021 10:42:45.
 * 
 * @author
 */

@Service(value = "toolkitService")
public class ToolkitServiceImpl implements ToolkitService {

	private static final Logger logger = LoggerFactory.getLogger(ToolkitServiceImpl.class);

	@Autowired()
	private InteroperabilidadService interoperabilidadService;

	@Autowired()
	private SolicitantesService solicitantesService;

	@Override
	public String existeBeneficiarioAlta(String dni) throws Exception {
		ToolkitServiceImpl.logger.debug("ToolkitServiceImpl - existeBeneficiarioAlta dni: " + dni);
		Solicitantes filter = new Solicitantes();
		filter.setIdentificador01(dni);
		Boolean isSolAlta = solicitantesService.isSolAlta(filter);
		ToolkitServiceImpl.logger.debug("ToolkitServiceImpl - existeBeneficiarioAlta Result: " + isSolAlta);
		return isSolAlta.toString();
	}

	@Override
	public String getIRPFYear() throws Exception {
		ToolkitServiceImpl.logger.debug("ToolkitServiceImpl - getIRPFYear");
		String year = interoperabilidadService.getIRPFYear();
		ToolkitServiceImpl.logger.debug("ToolkitServiceImpl - getIRPFYear Result: " + year);
		return year;

	}

	@Override
	public String getMotivosBaja() throws Exception {
		ToolkitServiceImpl.logger.debug("ToolkitServiceImpl - getMotivosBaja");
		String listaFormasXml = "";
		try {
			// recuperamos la lista de formas juridicas
			List<MotivosBaja> listaMotivos = MotivoBajaEnum.valuesMotivosBaja33(MotivoBajaEnum.EXCLUSIVO_DE_OFICIO_NO,
					MotivoBajaEnum.BAJA_NO);
			if (null != listaMotivos && !listaMotivos.isEmpty()) {
				Parameters listaParameters = new Parameters();
				Parameter param = null;
				for (MotivosBaja motivo : listaMotivos) {
					param = new Parameter();
					param.addValue(String.valueOf(motivo.getIdMotivoBaja33()));
					param.addValue(motivo.getDescEs33());
					param.addValue(motivo.getDescEu33());
					listaParameters.addParameter(param);
				}
				listaFormasXml = UtilidadesXML.marshalObjectWS(listaParameters);
			}

		} catch (Exception e) {
			ManagerErrors.manageException(e, "Error al generar la lista de motivos de baja");
		}
		ToolkitServiceImpl.logger.debug("ToolkitServiceImpl - getMotivosBaja Result: " + listaFormasXml);
		return listaFormasXml;
	}

	@Override
	public String getFechaSistema(String pattern) {
		Calendar cal = Calendar.getInstance();
		SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
		return simpleDateFormat.format(cal.getTime());
	}

	@Override
	public String getDatoDireccion(String documento, String campo) {
		ToolkitServiceImpl.logger.debug("ToolkitServiceImpl - getDatoDireccion");

		String valorVuelta = null;
		if (Utilidades.esBlancoNulo(documento)) {
			ToolkitServiceImpl.logger.error("ToolkitServiceImpl - getDatoDireccion - el documento es nulo", documento);
			return valorVuelta;
		}
		Solicitantes solFilter = new Solicitantes();
		solFilter.setIdentificador01(documento);
		if (null != documento) {
			Solicitantes sol = this.solicitantesService.findPorDni(solFilter);
			if (null == sol) {
				ToolkitServiceImpl.logger.error(
						"ToolkitServiceImpl - getDatoDireccion - el solicitante no esta dado de alta como beneficiario {}",
						documento);
				return valorVuelta;
			}

			if (null != sol.getDirecciones()) {
				if ("provincia".equals(campo)) {
					valorVuelta = sol.getDirecciones().getIdProvincia06();
				} else if ("municipio".equals(campo)) {
					valorVuelta = sol.getDirecciones().getIdMunicipio06();
				}
			} else {
				ToolkitServiceImpl.logger.error(
						"ToolkitServiceImpl - getDatoDireccion - el solicitante beneficiario no tiene direccion asociada {}",
						documento);
			}

		}

		ToolkitServiceImpl.logger.debug(
				"ToolkitServiceImpl - getDatoDireccion - documento: {} - campo: {} - Result: {}", documento, campo,
				valorVuelta);
		return valorVuelta;
	}

}
