package com.ejie.ad74a.control;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import com.ejie.ad74a.model.Dependencia;
import com.ejie.ad74a.model.Direcciones;
import com.ejie.ad74a.model.Discapacidad;
import com.ejie.ad74a.model.Expedientes;
import com.ejie.ad74a.model.ResultadoInteroperabilidad;
import com.ejie.ad74a.model.Solicitantes;
import com.ejie.ad74a.model.comun.Calle;
import com.ejie.ad74a.model.comun.Portal;
import com.ejie.ad74a.service.DependenciaService;
import com.ejie.ad74a.service.DiscapacidadService;
import com.ejie.ad74a.service.ExpedientesService;
import com.ejie.ad74a.service.comun.NoraService;
import com.ejie.ad74a.service.interoperabilidad.NisaeService;
import com.ejie.ad74a.util.comun.UtilLiterales;
import com.ejie.ad74a.util.comun.UtilidadesFecha;
import com.ejie.ad74a.util.constantes.Constantes;
import com.ejie.ad74a.util.constantes.GradoDependenciaEnum;
import com.ejie.x38.control.bind.annotation.RequestJsonBody;

import es.redsara.intermediacion.scsp.esquemas.datosespecificos.DatosUnicoTitular;
import es.redsara.intermediacion.scsp.esquemas.datosespecificos.DatosVariosTitulares;
import es.redsara.intermediacion.scsp.esquemas.datosespecificos.HabitanteDomicilio;
import es.redsara.intermediacion.scsp.esquemas.datosespecificos.HabitanteTitular;
import es.redsara.intermediacion.scsp.esquemas.datosespecificos.Retorno;

@Controller
@RequestMapping(value = "/recibirDatosNISAE")
public class RecibirDatosNISAEController {
	@Autowired
	private NisaeService nisaeService;
	@Autowired
	private ExpedientesService expedienteService;
	@Autowired
	private NoraService noraService;
	@Autowired
	private DependenciaService dependenciaService;
	@Autowired
	private DiscapacidadService discapacidadService;
	@javax.annotation.Resource
	private ReloadableResourceBundleMessageSource appMessageSource;

	@RequestMapping(value = "/getDatosDGPInterop", method = RequestMethod.POST)
	public @ResponseBody ResultadoInteroperabilidad getDatosDGPInterop(
			@RequestJsonBody(param = "identificadorSolicitante") String identificadorSolicitante,
			@RequestJsonBody(param = "apellidoSolicitante") String apellidoSolicitante,
			@RequestJsonBody(param = "fNacimientoSolicitante") String fNacimientoSolicitante,
			@RequestJsonBody(param = "idExpediente") String idExpediente,
			@RequestJsonBody(param = "tipoIden") String tipoIden) {
		SimpleDateFormat parser = new SimpleDateFormat(com.ejie.ad74a.constantes.Constantes.ES_DATE_MASK);
		Expedientes expediente = new Expedientes();
		expediente.setIdExpediente00(Long.parseLong(idExpediente));
		List<Expedientes> expedientes = this.expedienteService.findAllLikeBandejaPapel0(expediente, null, false);
		expediente = expedientes.get(0);
		expediente.setSolicitantes(new Solicitantes());

		ResultadoInteroperabilidad resultadoInterop = new ResultadoInteroperabilidad();
		try {
			if (fNacimientoSolicitante != null) {
				Date fnaci = parser.parse(fNacimientoSolicitante);

				expediente.getSolicitantes().setfNacimiento01(fnaci);
			}
			expediente.getSolicitantes().setTipoIdentificador01(tipoIden);
			expediente.getSolicitantes().setIdentificador01(identificadorSolicitante);
			expediente.getSolicitantes().setApellido101(apellidoSolicitante);

			Retorno retorno = this.nisaeService.getDatosDGPInterop(expediente);
			resultadoInterop.setMensaje(retorno.getEstadoResultado().getDescripcion());

			if (retorno.getEstadoResultado().getResultado().equals("00")) {
				resultadoInterop.setCodResultado(Constantes.CERO);
				Solicitantes solicitante = new Solicitantes();
				solicitante.setApellido101(retorno.getDatosTitular().getApellido1());
				solicitante.setApellido201(retorno.getDatosTitular().getApellido2());
				solicitante.setNombre01(retorno.getDatosTitular().getNombre());
				solicitante.setfNacimiento01(UtilidadesFecha.formatearStringToDateFormat(
						retorno.getDatosTitular().getDatosNacimiento().getFecha(), Constantes.DATE_FORMAT_DGP));
				solicitante.setSexo01(retorno.getDatosTitular().getSexo());
				resultadoInterop.setResultadoDGP(solicitante);
			} else {
				resultadoInterop.setCodResultado(Constantes.DOS);
			}

			return resultadoInterop;
		} catch (ParseException e) {
			resultadoInterop.setCodResultado(Constantes.DOS);
			resultadoInterop = new ResultadoInteroperabilidad();

			return resultadoInterop;
		}

	}

	@RequestMapping(value = "/getDatosDependencia", method = RequestMethod.POST)
	public @ResponseBody ResultadoInteroperabilidad getDatosDependencia(
			@RequestJsonBody(param = "identificadorSolicitante") String identificadorSolicitante,
			@RequestJsonBody(param = "nombre") String nombre,
			@RequestJsonBody(param = "apellidoSolicitante") String apellidoSolicitante,
			@RequestJsonBody(param = "apellido2") String apellido2,
			@RequestJsonBody(param = "idExpediente00") Long idExpediente00,
			@RequestJsonBody(param = "tipoIden") Long tipoIden,
			@RequestJsonBody(param = "idSolicitante") Long idSolicitante) {
		Expedientes expediente = new Expedientes();
		Solicitantes solicitante = new Solicitantes();
		solicitante.setIdSolicitante01(idSolicitante);
		solicitante.setIdentificador01(identificadorSolicitante);
		solicitante.setTipoIdentificador01(Long.toString(tipoIden));
		expediente.setSolicitantes(solicitante);
		expediente.setIdExpediente00(idExpediente00);
		Expedientes expDatos = expediente;
		expDatos.getSolicitantes().setNombre01(nombre);
		expDatos.getSolicitantes().setApellido101(apellidoSolicitante);
		expDatos.getSolicitantes().setApellido201(apellido2);
		Retorno retorno = this.nisaeService.getDatosDependenciaInterop(expDatos);
		Dependencia dependencia = new Dependencia();
		dependencia.setIdExpediente04(idExpediente00);
		dependencia.setIdSolicitante04(solicitante.getIdSolicitante01());

		ResultadoInteroperabilidad resultadoInterop = new ResultadoInteroperabilidad();
		resultadoInterop.setMensaje(retorno.getEstadoResultado().getDescripcion());

		if (retorno.getResolucion() != null) {
			resultadoInterop.setCodResultado(Constantes.CERO);
			String grado = retorno.getResolucion().getGradoyNivel();
			GradoDependenciaEnum gradoDependencia = GradoDependenciaEnum.getByIdInterop(grado);

			dependencia.setIdGradoDependencia04(gradoDependencia.getIdBBDD());

			try {
				dependencia.setfResolucion04(
						new SimpleDateFormat("dd/MM/yyyy").parse(retorno.getResolucion().getFechaResolucion()));
			} catch (Exception e) {
				// TODO: handle exception
			}
			// En este bloque se actualiza la depencia ya no queremos eso, con lo cual lo
			// comentamos
			/*
			 * Dependencia depenFilter = new Dependencia();
			 * depenFilter.setIdExpediente04(idExpediente00); List<Dependencia> dependencias
			 * = this.dependenciaService.findAllLike(depenFilter, null, false); if
			 * (dependencias.size() != 0) {
			 * dependencia.setIdDependencia04(dependencias.get(0).getIdDependencia04());
			 * 
			 * this.dependenciaService.update(dependencia); } else {
			 * this.dependenciaService.add(dependencia); }
			 */

		} else {
			resultadoInterop.setCodResultado(Constantes.UNO);
		}

		resultadoInterop.setResultadoDependencia(dependencia);
		return resultadoInterop;

	}

	@RequestMapping(value = "/getDatosDiscapacidad", method = RequestMethod.POST)
	// public @ResponseBody Discapacidad getDatosDiscapacidad(
	public @ResponseBody ResultadoInteroperabilidad getDatosDiscapacidad(
			@RequestJsonBody(param = "identificadorSolicitante") String identificadorSolicitante,
			@RequestJsonBody(param = "idExpediente00") Long idExpediente00,
			@RequestJsonBody(param = "tipoIden") Long tipoIden,
			@RequestJsonBody(param = "idSolicitante") Long idSolicitante,
			@RequestJsonBody(param = "provincia") String provincia) {
		Expedientes expediente = new Expedientes();
		Solicitantes solicitante = new Solicitantes();
		solicitante.setIdentificador01(identificadorSolicitante);
		solicitante.setIdSolicitante01(idSolicitante);
		solicitante.setTipoIdentificador01(Long.toString(tipoIden));
		expediente.setSolicitantes(solicitante);
		expediente.setIdExpediente00(idExpediente00);
		Direcciones direccion = new Direcciones();
		direccion.setIdProvincia06(provincia);
		expediente.setDirecciones(direccion);
		Discapacidad discapacidad = new Discapacidad();
		discapacidad.setIdExpediente71(idExpediente00);
		discapacidad.setIdSolicitante71(solicitante.getIdSolicitante01());

		Retorno retorno = this.nisaeService.getDatosDiscapacidadInterop(expediente);
		ResultadoInteroperabilidad resultadoInterop = new ResultadoInteroperabilidad();
//		resultadoInterop.setCodResultado(retorno.getEstadoResultado().getResultado());
		resultadoInterop.setMensaje(retorno.getEstadoResultado().getDescripcion());

//		String resultado = "";
		if (retorno.getEstadoResultado().getResultado().equals("0000")
				|| retorno.getEstadoResultado().getResultado().equals("1")
				|| retorno.getEstadoResultado().getResultado().equals("5")
				|| retorno.getEstadoResultado().getResultado().equals("0003")
				|| retorno.getEstadoResultado().getResultado().equals("2")) {
			resultadoInterop.setCodResultado(Constantes.UNO);
//		} else if (retorno.getEstadoResultado().getResultado().equals("2")) {
//			resultadoInterop.setCodResultado(Constantes.CERO);
//			Discapacidad discaFilter = new Discapacidad();
//			discaFilter.setIdExpediente71(idExpediente00);
//			List<Discapacidad> discapacidades = this.discapacidadService.findAllLike(discaFilter, null, false);
//			if (discapacidades.size() != 0) {
//				discapacidad.setIdDiscapacidad71(discapacidades.get(0).getIdDiscapacidad71());
//				this.discapacidadService.update(discapacidad);
//			} else {
//				discapacidad = this.discapacidadService.add(discapacidad);
//			}
		} else if (retorno.getEstadoResultado().getResultado().equals("0")) {
			resultadoInterop.setCodResultado(Constantes.CERO);
			if (retorno.getCertificadoDatosDiscapacidad() != null
					&& retorno.getCertificadoDatosDiscapacidad().getGradoDiscapacidad() != null) {
				discapacidad.setDescDiscapacidad71(retorno.getCertificadoDatosDiscapacidad().getGradoDiscapacidad());
			}

			if (retorno.getCertificadoDatosDiscapacidad() != null
					&& retorno.getCertificadoDatosDiscapacidad().getTiposDiscapacidad() != null) {
				List<String> nombreDiscapacidades = retorno.getCertificadoDatosDiscapacidad().getTiposDiscapacidad()
						.getTipoDiscapacidad();
				for (int i = 0; i < nombreDiscapacidades.size(); i++) {
					if (nombreDiscapacidades.get(i).equalsIgnoreCase(Constantes.NisaeDiscapacidad.FISICA)) {
						discapacidad.setDiscapacidadFisica71(Constantes.VAL_NUM_SI);
					} else if (nombreDiscapacidades.get(i).equalsIgnoreCase(Constantes.NisaeDiscapacidad.INTELECTUAL)) {
						discapacidad.setDiscapacidadIntelecto71(Constantes.VAL_NUM_SI);
					} else if (nombreDiscapacidades.get(i).equalsIgnoreCase(Constantes.NisaeDiscapacidad.SENSORIAL)) {
						discapacidad.setDiscapacidadSensorial71(Constantes.VAL_NUM_SI);
					}
				}
			}
			// En este bloque se actualiza la discapacidad ya no queremos eso, con lo cual
			// lo
			// comentamos
			/*
			 * Discapacidad discaFilter = new Discapacidad();
			 * discaFilter.setIdExpediente71(idExpediente00); List<Discapacidad>
			 * discapacidades = this.discapacidadService.findAllLike(discaFilter, null,
			 * false); if (discapacidades.size() != 0) {
			 * discapacidad.setIdDiscapacidad71(discapacidades.get(0).getIdDiscapacidad71())
			 * ; this.discapacidadService.update(discapacidad); } else {
			 * this.discapacidadService.add(discapacidad); }
			 */
		} else if (retorno.getEstadoResultado().getResultado().equals("0997")) {
			resultadoInterop.setCodResultado(Constantes.DOS);
		} else {
			resultadoInterop.setCodResultado(Constantes.UNO);
		}

		resultadoInterop.setResultadoDiscapacidad(discapacidad);
		return resultadoInterop;

	}

	@RequestMapping(value = "/getDatosPadronInterop", method = RequestMethod.POST)
	public @ResponseBody ResultadoInteroperabilidad getDatosPadronInterop(
			@RequestJsonBody(param = "identificadorSolicitante") String identificadorSolicitante,
			@RequestJsonBody(param = "apellidoSolicitante") String apellidoSolicitante,
			@RequestJsonBody(param = "fNacimientoSolicitante") String fNacimientoSolicitante,
			@RequestJsonBody(param = "idExpediente") String idExpediente,
			@RequestJsonBody(param = "tipoIden") String tipoIden,
			@RequestJsonBody(param = "provincia") String provincia,
			@RequestJsonBody(param = "municipio") String municipio, @RequestJsonBody(param = "nombre") String nombre,
			@RequestJsonBody(param = "apellido2") String apellido2,
			@RequestJsonBody(param = "localidad") String localidad, @RequestJsonBody(param = "calle") String calle,
			@RequestJsonBody(param = "portal") String portal,
			@RequestJsonBody(param = "portalAlternativo") String portalAlternativo,
			@RequestJsonBody(param = "calleAlternativa") String calleAlternativa,
			@RequestJsonBody(param = "piso") String piso) {
		SimpleDateFormat parser = new SimpleDateFormat("dd/MM/YYYY");
		Expedientes expediente = new Expedientes();
		expediente.setIdExpediente00(Long.parseLong(idExpediente));
		List<Expedientes> expedientes = this.expedienteService.findAllLikeBandejaPapel0(expediente, null, false);
		expediente = expedientes.get(0);
		ResultadoInteroperabilidad resultadoInterop = new ResultadoInteroperabilidad();
		try {
			if (fNacimientoSolicitante != null) {
				Date fnaci = parser.parse(fNacimientoSolicitante);
				expediente.getSolicitantes().setfNacimiento01(fnaci);
			}
			expediente.setSolicitantes(new Solicitantes());
			expediente.getSolicitantes().setDirecciones(new Direcciones());
			expediente.getSolicitantes().setTipoIdentificador01(tipoIden);
			expediente.getSolicitantes().setIdentificador01(identificadorSolicitante);
			expediente.getSolicitantes().setNombre01(nombre);
			expediente.getSolicitantes().setApellido101(apellidoSolicitante);
			expediente.getSolicitantes().setApellido201(apellido2);
			expediente.getDirecciones().setIdProvincia06(provincia);
			expediente.getDirecciones().setIdMunicipio06(municipio);
			Retorno retorno = this.nisaeService.getDatosPadronInterop(expediente);

			if (retorno.getEstadoResultado().getResultado().equals("S")
					&& retorno.getEstadoResultado().getUnicoTitular().equals("S")) {

//				DatosUnicoTitular unicotitular = retorno.getDatosSalidaPadronDomiciliarioRGI().getDatosUnicoTitular();
				DatosUnicoTitular unicotitular = retorno.getDatosSalidaPadronDomiciliario().getDatosUnicoTitular();
				Calle calleNoraNisae = new Calle();
//				calleNoraNisae.setCodCalle(Long.valueOf(unicotitular.getListaDomiciliosTitular().getDomicilioTitular()
//						.get(0).getDatosDomicilio().getCodigoViaCalle()));
//				calleNoraNisae.setCodMunicipio(unicotitular.getListaDomiciliosTitular().getDomicilioTitular().get(0)
//						.getDatosDomicilio().getCodigoMunicipioResidencia());
//				calleNoraNisae.setCodProvincia(unicotitular.getListaDomiciliosTitular().getDomicilioTitular().get(0)
//						.getDatosDomicilio().getCodigoProvinciaResidencia());
				calleNoraNisae.setCodCalle(
						Long.valueOf(unicotitular.getPadronDomiciliario().getDomicilioPadron().getCodigoViaCalle()));
				calleNoraNisae.setCodMunicipio(
						unicotitular.getPadronDomiciliario().getDomicilioPadron().getCodigoMunicipioResidencia());
				calleNoraNisae.setCodProvincia(
						unicotitular.getPadronDomiciliario().getDomicilioPadron().getCodigoProvinciaResidencia());
				List<Calle> callesNoraNisae = this.noraService.findAllCallesNisae(calleNoraNisae);
				calleNoraNisae = callesNoraNisae.get(0);
				Portal portalNoraNisae = new Portal();
//				portalNoraNisae.setNumero(Long.valueOf(unicotitular.getListaDomiciliosTitular().getDomicilioTitular()
//						.get(0).getDatosDomicilio().getPortal()));
				portalNoraNisae
						.setNumero(Long.valueOf(unicotitular.getPadronDomiciliario().getDomicilioPadron().getPortal()));
				portalNoraNisae.setCodCalle(calleNoraNisae.getCodCalle());
				// portalNoraNisae.setCodCalle(Long.valueOf(calleNoraNisae.getCodCalle()));
				List<Portal> portalesNoraNisae = this.noraService.findAllPortales(portalNoraNisae);
				portalNoraNisae = portalesNoraNisae.get(0);

				String mensajeRespuesta = "";
				if (portalNoraNisae != null && calleNoraNisae != null) {
//					if (((Long.valueOf(portal).equals(portalNoraNisae.getCodPortal()))
//							|| portalAlternativo.equals(unicotitular.getListaDomiciliosTitular().getDomicilioTitular()
//									.get(0).getDatosDomicilio().getPortal().replaceAll("^0+", "")))
//							&& (calleNoraNisae.getIdCalle().equals(Long.valueOf(calle)))
//							&& (agregarCerosPlanta(piso).equals(unicotitular.getListaDomiciliosTitular()
//									.getDomicilioTitular().get(0).getDatosDomicilio().getPlanta()))) {
					if (((portal != null && !"".equals(portal)
							&& Long.valueOf(portal).equals(portalNoraNisae.getCodPortal()))
							|| portalAlternativo.equals(unicotitular.getPadronDomiciliario().getDomicilioPadron()
									.getPortal().replaceAll("^0+", "")))
							&& (calleNoraNisae.getIdCalle().equals(Long.valueOf(calle))) && (agregarCerosPlanta(piso)
									.equals(unicotitular.getPadronDomiciliario().getDomicilioPadron().getPlanta()))) {

						mensajeRespuesta = UtilLiterales.getLiteralMessage(appMessageSource,
								"bandejaPapel0.datosCorrectos");
						resultadoInterop.setCodResultado(Constantes.CERO);
					} else {
//						mensajeRespuesta = UtilLiterales.getLiteralMessage(appMessageSource,
//								"bandejaPapel0.datosNoCorrectos")
//								+ unicotitular.getListaDomiciliosTitular().getDomicilioTitular().get(0)
//										.getDatosDomicilio().getNombreProvinciaResidencia()
//								+ " "
//								+ unicotitular.getListaDomiciliosTitular().getDomicilioTitular().get(0)
//										.getDatosDomicilio().getNombreMunicipioResidencia()
//								+ unicotitular.getListaDomiciliosTitular().getDomicilioTitular().get(0)
//										.getDatosDomicilio().getNombreViaCastellano()
//								+ UtilLiterales.getLiteralMessage(appMessageSource, "bandejaPapel0.numero")
//								+ unicotitular.getListaDomiciliosTitular().getDomicilioTitular().get(0)
//										.getDatosDomicilio().getPortal()
//								+ " "
//								+ unicotitular.getListaDomiciliosTitular().getDomicilioTitular().get(0)
//										.getDatosDomicilio().getPortal()
//								+ unicotitular.getListaDomiciliosTitular().getDomicilioTitular().get(0)
//										.getDatosDomicilio().getPuerta()
//								+ UtilLiterales.getLiteralMessage(appMessageSource, "bandejaPapel0.y") + " ";

						Locale locale = LocaleContextHolder.getLocale();
						String nombreVia = (locale.getLanguage()
								.equalsIgnoreCase(com.ejie.ad74a.constantes.Constantes.EU))
										? unicotitular.getPadronDomiciliario().getDomicilioPadron()
												.getNombreViaEuskera()
										: unicotitular.getPadronDomiciliario().getDomicilioPadron()
												.getNombreViaCastellano();

						mensajeRespuesta = UtilLiterales.getLiteralMessage(appMessageSource,
								"bandejaPapel0.datosNoCorrectos") + nombreVia + ", "
								+ UtilLiterales.getLiteralMessage(appMessageSource, "bandejaPapel0.numero") + ": "
								+ unicotitular.getPadronDomiciliario().getDomicilioPadron().getPortal() + ", "
								+ unicotitular.getPadronDomiciliario().getDomicilioPadron().getPlanta() + "-"
								+ unicotitular.getPadronDomiciliario().getDomicilioPadron().getPuerta() + ", "
								+ unicotitular.getPadronDomiciliario().getDomicilioPadron().getCodigoPostal() + " "
								+ unicotitular.getPadronDomiciliario().getDomicilioPadron()
										.getNombreLocalidadResidencia()
								+ ", " + unicotitular.getPadronDomiciliario().getDomicilioPadron()
										.getNombreProvinciaResidencia();
						resultadoInterop.setCodResultado(Constantes.UNO);

					}
//					if (retorno.getDatosSalidaPadronDomiciliarioRGI().getDatosUnicoTitular().getListaDomiciliosTitular()
//							.getDomicilioTitular().get(0).getListaHabitantesDomicilio().getHabitanteDomicilio()
//							.size() > 1
//							&& comprobarViveSolo(retorno.getDatosSalidaPadronDomiciliarioRGI().getDatosUnicoTitular()
//									.getListaDomiciliosTitular().getDomicilioTitular().get(0)
//									.getListaHabitantesDomicilio().getHabitanteDomicilio())) {
//
//						mensajeRespuesta = mensajeRespuesta
//								+ UtilLiterales.getLiteralMessage(appMessageSource, "bandejapapel0.noViveSolo");
//					} else {
//						mensajeRespuesta = mensajeRespuesta
//								+ UtilLiterales.getLiteralMessage(appMessageSource, "bandejapapel0.viveSolo");
//					}
					// Si es único titular no vienen datos de más habitantes. Esto no tiene sentido
//					if (retorno.getDatosSalidaPadronDomiciliario().getDatosUnicoTitular().getListaDomiciliosTitular()
//							.getDomicilioTitular().get(0).getListaHabitantesDomicilio().getHabitanteDomicilio()
//							.size() > 1
//							&& comprobarViveSolo(retorno.getDatosSalidaPadronDomiciliario().getDatosUnicoTitular()
//									.getListaDomiciliosTitular().getDomicilioTitular().get(0)
//									.getListaHabitantesDomicilio().getHabitanteDomicilio())) {
//
//						mensajeRespuesta = mensajeRespuesta
//								+ UtilLiterales.getLiteralMessage(appMessageSource, "bandejapapel0.noViveSolo");
//					} else {
//						mensajeRespuesta = mensajeRespuesta
//								+ UtilLiterales.getLiteralMessage(appMessageSource, "bandejapapel0.viveSolo");
//					}
				}
				// return mensajeRespuesta;
				resultadoInterop.setResultadoPadron(mensajeRespuesta);
				resultadoInterop.setMensaje(mensajeRespuesta);
			} else if (retorno.getEstadoResultado().getResultado().equals("S")
					&& !retorno.getEstadoResultado().getUnicoTitular().equals("S")) {
//				DatosVariosTitulares variosTitulares = retorno.getDatosSalidaPadronDomiciliarioRGI()
//						.getDatosVariosTitulares();
				DatosVariosTitulares variosTitulares = retorno.getDatosSalidaPadronDomiciliario()
						.getDatosVariosTitulares();
				// Comprobar si uno de los titulares es correcto
				resultadoInterop.setCodResultado(Constantes.UNO);
				String mensajeRespuesta = this
						.obtenerTextoVariosTitulares(
								retorno.getDatosSalidaPadronDomiciliario().getDatosVariosTitulares()
										.getListaHabitantesTitular().getHabitanteTitular(),
								retorno.getEstadoResultado().getDescripcion());
				resultadoInterop.setResultadoPadron(mensajeRespuesta);
				resultadoInterop.setMensaje(mensajeRespuesta);
//				resultadoInterop.setResultadoPadron(
//						UtilLiterales.getLiteralMessage(appMessageSource, "bandejapapel0.variosTitulares"));
				// return "Tiene varios titulares";
			} else if (retorno.getEstadoResultado().getResultado().equals("E")) {
				resultadoInterop.setCodResultado(Constantes.DOS);
				resultadoInterop.setResultadoPadron(retorno.getEstadoResultado().getDescripcion() + ":"
						+ retorno.getEstadoResultado().getMotivosError());
				resultadoInterop.setMensaje(retorno.getEstadoResultado().getDescripcion() + ": "
						+ retorno.getEstadoResultado().getMotivosError());
				// return retorno.getEstadoResultado().getDescripcion();
			} else if (retorno.getEstadoResultado().getResultado().equals("0997")) {
				resultadoInterop.setCodResultado(Constantes.DOS);
				resultadoInterop.setResultadoPadron(retorno.getEstadoResultado().getDescripcion());
				resultadoInterop.setMensaje(retorno.getEstadoResultado().getDescripcion());
				// return retorno.getEstadoResultado().getDescripcion();
			} else {
				resultadoInterop.setCodResultado(Constantes.UNO);
				resultadoInterop.setResultadoPadron(retorno.getEstadoResultado().getDescripcion());
				resultadoInterop.setMensaje(retorno.getEstadoResultado().getDescripcion());
				// return retorno.getEstadoResultado().getDescripcion();
			}

		} catch (ParseException e) {
			resultadoInterop.setCodResultado(Constantes.DOS);
			resultadoInterop.setResultadoPadron(e.getMessage());
			resultadoInterop.setMensaje(e.getMessage());
		}
		return resultadoInterop;
	}

	private String obtenerTextoVariosTitulares(List<HabitanteTitular> listaHabitantes, String desc) {

		StringBuilder result = new StringBuilder();
		int cont = 0;
		for (HabitanteTitular habitante : listaHabitantes) {
			Locale locale = LocaleContextHolder.getLocale();
			String nombreVia = (locale.getLanguage().equalsIgnoreCase(com.ejie.ad74a.constantes.Constantes.EU))
					? habitante.getDomicilioPadron().getNombreViaEuskera()
					: habitante.getDomicilioPadron().getNombreViaCastellano();

			if (cont == 0) {
				result.append(desc);
				result.append(":<br/><ul>");
			}
			result.append("<li>");
			result.append(habitante.getApellido1()).append(" ").append(habitante.getApellido2()).append(", ")
					.append(habitante.getNombre()).append(" - ").append(habitante.getNumDocumento()).append(": ");

			result.append(nombreVia).append(", ")
					.append(UtilLiterales.getLiteralMessage(appMessageSource, "bandejaPapel0.numero"))
					.append(habitante.getDomicilioPadron().getPortal()).append(", ")
					.append(habitante.getDomicilioPadron().getPlanta()).append("-")
					.append(habitante.getDomicilioPadron().getPuerta()).append(", ")
					.append(habitante.getDomicilioPadron().getCodigoPostal()).append(", ")
					.append(habitante.getDomicilioPadron().getNombreLocalidadResidencia().trim());
			result.append("</li>");
			cont++;
		}
		result.append("</ul>");
		return result.toString();
	}

	public static boolean comprobarViveSolo(List<HabitanteDomicilio> habitantesDomicilio) {
		List<HabitanteDomicilio> habitantesDeAlta = new ArrayList<HabitanteDomicilio>();
		for (int i = 0; habitantesDomicilio.size() >= i; i++) {
			if (habitantesDomicilio.get(i).getFechaBajaDomicilio() != null) {
				habitantesDeAlta.add(habitantesDomicilio.get(i));
			}
		}
		if (habitantesDeAlta.size() > 1) {
			return false;
		} else {
			return true;
		}

	}

	public static String agregarCerosPlanta(String numero) {
		if (numero != null && !"".equals(numero)) {
			int longitudOriginal = numero.length();
			if (longitudOriginal < 2) {
				int cerosNecesarios = 2 - longitudOriginal;
				StringBuilder sb = new StringBuilder();
				for (int i = 0; i < cerosNecesarios; i++) {
					sb.append("0");
				}
				sb.append(numero);
				return sb.toString();
			} else {
				return numero;
			}
		}

		return "";
	}

	public static String agregarCerosPortal(String numero) {
		int longitudOriginal = numero.length();
		if (longitudOriginal < 4) {
			int cerosNecesarios = 4 - longitudOriginal;
			StringBuilder sb = new StringBuilder();
			for (int i = 0; i < cerosNecesarios; i++) {
				sb.append("0");
			}
			sb.append(numero);
			return sb.toString();
		} else {
			return numero;
		}
	}

	public static String agregarCerosCalle(String numero) {
		int longitudOriginal = numero.length();
		if (longitudOriginal < 5) {
			int cerosNecesarios = 5 - longitudOriginal;
			StringBuilder sb = new StringBuilder();
			for (int i = 0; i < cerosNecesarios; i++) {
				sb.append("0");
			}
			sb.append(numero);
			return sb.toString();
		} else {
			return numero;
		}
	}

}
