package com.ejie.ab79.serviciosWeb;

import java.util.List;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.ParameterStyle;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.context.support.SpringBeanAutowiringSupport;

import com.ejie.ab79.comun.Constantes;
import com.ejie.ab79.exceptions.Ab79Exception;
import com.ejie.ab79.model.servicioWeb.InspeccionWS;
import com.ejie.ab79.model.servicioWeb.PreguntasExpedienteWS;
import com.ejie.ab79.service.serviciosWeb.ServiciosWebService;

@WebService(serviceName = "ab79WebService", portName = "ab79WebServicePort", targetNamespace = "http://com.ejie.ab79.serviciosWeb")
@SOAPBinding(parameterStyle = ParameterStyle.WRAPPED)
public class WebServiceImpl extends SpringBeanAutowiringSupport {

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

	@Autowired
	ServiciosWebService serviciosWebService;

	@WebMethod
	public String crearInspeccion(@WebParam(name = "folderId") String folderId,
			@WebParam(name = "inspeccion") InspeccionWS objetoInspeccion,
			@WebParam(name = "preguntasExpedienteWS") List<PreguntasExpedienteWS> preguntasExpedienteWS,
			@WebParam(name = "usuario") String usuario,
			@WebParam(name = "idOrigenInspeccion") Integer idOrigenInspeccion,
			@WebParam(name = "idExpedienteOrigen") Integer idExpedienteOrigen,
			@WebParam(name = "numDenuncia") String numDenuncia) throws Ab79Exception {
		WebServiceImpl.logger.info("[crearInspeccion] : ***************************************");
		WebServiceImpl.logger.info("[crearInspeccion] : Parametros de entrada Webservice crearInspeccion AB79");
		WebServiceImpl.logger.info("[crearInspeccion] : ***************************************");
		if (folderId != null) {
			WebServiceImpl.logger.info("[crearInspeccion] : FolderId - " + folderId);
		}
		if (objetoInspeccion.getFechaLimiteInspeccion() != null) {
			WebServiceImpl.logger
					.info("[crearInspeccion] : FechaLimiteInspeccion - " + objetoInspeccion.getFechaLimiteInspeccion());
		}
		if (objetoInspeccion.getObservacionesActuacionInspeccion() != null) {
			WebServiceImpl.logger.info("[crearInspeccion] : ObservacionesActuacionInspeccion - "
					+ objetoInspeccion.getObservacionesActuacionInspeccion());
		}
		WebServiceImpl.logger.info("");

		if (objetoInspeccion.getDatosInspeccionWS() != null) {
			for (int i = 0; i < objetoInspeccion.getDatosInspeccionWS().size(); i++) {
				WebServiceImpl.logger.info("[crearInspeccion] : DatosInspeccion " + (i + 1) + ":");

				if (objetoInspeccion.getDatosInspeccionWS().get(i).getDescripcionCastellano() != null) {
					WebServiceImpl.logger.info("[crearInspeccion] : 	DescripcionCastellano - "
							+ objetoInspeccion.getDatosInspeccionWS().get(i).getDescripcionCastellano());
				}
				if (objetoInspeccion.getDatosInspeccionWS().get(i).getDescripcionEuskera() != null) {
					WebServiceImpl.logger.info("[crearInspeccion] : 	DescripcionEuskera - "
							+ objetoInspeccion.getDatosInspeccionWS().get(i).getDescripcionEuskera());
				}
				if (objetoInspeccion.getDatosInspeccionWS().get(i).getObservacionesCastellano() != null) {
					WebServiceImpl.logger.info("[crearInspeccion] : 	ObservacionesCastellano - "
							+ objetoInspeccion.getDatosInspeccionWS().get(i).getObservacionesCastellano());
				}
				if (objetoInspeccion.getDatosInspeccionWS().get(i).getObservacionesEuskera() != null) {
					WebServiceImpl.logger.info("[crearInspeccion] : 	ObservacionesEuskera - "
							+ objetoInspeccion.getDatosInspeccionWS().get(i).getObservacionesEuskera());
				}
				if (objetoInspeccion.getDatosInspeccionWS().get(i).getFechaFactura() != null) {
					WebServiceImpl.logger.info("[crearInspeccion] : 	FechaFactura - "
							+ objetoInspeccion.getDatosInspeccionWS().get(i).getFechaFactura());
				}
				if (objetoInspeccion.getDatosInspeccionWS().get(i).getNumeroFactura() != null) {
					WebServiceImpl.logger.info("[crearInspeccion] : 	NumeroFactura - "
							+ objetoInspeccion.getDatosInspeccionWS().get(i).getNumeroFactura());
				}
				if (objetoInspeccion.getDatosInspeccionWS().get(i).getProveedor() != null) {
					WebServiceImpl.logger.info("[crearInspeccion] : 	Proveedor - "
							+ objetoInspeccion.getDatosInspeccionWS().get(i).getProveedor());
				}
				if (objetoInspeccion.getDatosInspeccionWS().get(i).getImporte() != null) {
					WebServiceImpl.logger.info("[crearInspeccion] : 	Importe - "
							+ objetoInspeccion.getDatosInspeccionWS().get(i).getImporte());
				}
				if (objetoInspeccion.getDatosInspeccionWS().get(i).getImporteAdmitido() != null) {
					WebServiceImpl.logger.info("[crearInspeccion] : 	ImporteAdmitido - "
							+ objetoInspeccion.getDatosInspeccionWS().get(i).getImporteAdmitido());
				}
				if (objetoInspeccion.getDatosInspeccionWS().get(i).getConcepto() != null) {
					WebServiceImpl.logger.info("[crearInspeccion] : 	Concepto - "
							+ objetoInspeccion.getDatosInspeccionWS().get(i).getConcepto());
				}
			}
			WebServiceImpl.logger.info("");
		}
		if (objetoInspeccion.getDatosEstablecimientoWS() != null) {
			WebServiceImpl.logger.info("[crearInspeccion] : DatosEstablecimiento:");

			if (objetoInspeccion.getDatosEstablecimientoWS().getTipoEstablecimiento() != null) {
				WebServiceImpl.logger.info("[crearInspeccion] : 	TipoEstablecimiento - "
						+ objetoInspeccion.getDatosEstablecimientoWS().getTipoEstablecimiento());
			}
			if (objetoInspeccion.getDatosEstablecimientoWS().getCategoriaEstablecimiento() != null) {
				WebServiceImpl.logger.info("[crearInspeccion] : 	CategoriaEstablecimiento - "
						+ objetoInspeccion.getDatosEstablecimientoWS().getCategoriaEstablecimiento());
			}
			if (objetoInspeccion.getDatosEstablecimientoWS().getModalidadEstablecimiento() != null) {
				WebServiceImpl.logger.info("[crearInspeccion] : 	ModalidadEstablecimiento - "
						+ objetoInspeccion.getDatosEstablecimientoWS().getModalidadEstablecimiento());
			}
			if (objetoInspeccion.getDatosEstablecimientoWS().getIdentEstablecimiento() != null) {
				WebServiceImpl.logger.info("[crearInspeccion] : 	IdentEstablecimiento - "
						+ objetoInspeccion.getDatosEstablecimientoWS().getIdentEstablecimiento());
			}

			if (objetoInspeccion.getDatosEstablecimientoWS() != null) {
				for (int x = 0; x < objetoInspeccion.getDatosEstablecimientoWS().getDatosValidarWS().size(); x++) {
					WebServiceImpl.logger.info("[crearInspeccion] : 	DatosValidar " + (x + 1) + ":");

					if (objetoInspeccion.getDatosEstablecimientoWS().getDatosValidarWS().get(x)
							.getIdentificadorDatoEstablecimiento() != null) {
						WebServiceImpl.logger.info("[crearInspeccion] : 	IdentificadorDatoEstablecimiento - "
								+ objetoInspeccion.getDatosEstablecimientoWS().getDatosValidarWS().get(x)
										.getIdentificadorDatoEstablecimiento());
					}
					if (objetoInspeccion.getDatosEstablecimientoWS().getDatosValidarWS().get(x)
							.getValorValidar() != null) {
						WebServiceImpl.logger.info("[crearInspeccion] : 	ValorValidar - " + objetoInspeccion
								.getDatosEstablecimientoWS().getDatosValidarWS().get(x).getValorValidar());
					}
				}

				for (int j = 0; j < objetoInspeccion.getDatosEstablecimientoWS().getObjetosValidarWS().size(); j++) {
					WebServiceImpl.logger.info("[crearInspeccion] : 	ObjetosValidar " + (j + 1) + ":");

					if (objetoInspeccion.getDatosEstablecimientoWS().getObjetosValidarWS().get(j)
							.getIdObjetoValidar() != null) {
						WebServiceImpl.logger.info("[crearInspeccion] : 	IdObjetosValidar - " + objetoInspeccion
								.getDatosEstablecimientoWS().getObjetosValidarWS().get(j).getIdObjetoValidar());
					}
					if (objetoInspeccion.getDatosEstablecimientoWS().getObjetosValidarWS().get(j)
							.getDescObjetoValidar() != null) {
						WebServiceImpl.logger.info("[crearInspeccion] : 	DescripcionObjetosValidar - "
								+ objetoInspeccion.getDatosEstablecimientoWS().getObjetosValidarWS().get(j)
										.getDescObjetoValidar());
					}

					for (int k = 0; k < objetoInspeccion.getDatosEstablecimientoWS().getObjetosValidarWS().get(j)
							.getDatosValidarWS().size(); k++) {

						if (objetoInspeccion.getDatosEstablecimientoWS().getObjetosValidarWS().get(j)
								.getDatosValidarWS().get(k).getIdentificadorDatoEstablecimiento() != null) {
							WebServiceImpl.logger.info("[crearInspeccion] : 	IdentificadorDatoEstablecimiento - "
									+ objetoInspeccion.getDatosEstablecimientoWS().getObjetosValidarWS().get(j)
											.getDatosValidarWS().get(k).getIdentificadorDatoEstablecimiento());
						}
						if (objetoInspeccion.getDatosEstablecimientoWS().getObjetosValidarWS().get(j)
								.getDatosValidarWS().get(k).getValorValidar() != null) {
							WebServiceImpl.logger.info("[crearInspeccion] : 	ValorValidar - "
									+ objetoInspeccion.getDatosEstablecimientoWS().getObjetosValidarWS().get(j)
											.getDatosValidarWS().get(k).getValorValidar());
						}

					}

				}

			}

			WebServiceImpl.logger.info("");
		}

		if (!preguntasExpedienteWS.isEmpty()) {
			WebServiceImpl.logger
					.info("[crearInspeccion] : 	Nº preguntas expediente - " + preguntasExpedienteWS.size());

			for (int x = 0; x < preguntasExpedienteWS.size(); x++) {

				WebServiceImpl.logger.info("[crearInspeccion] : 	Pregunta Expediente " + x + 1);

				if (preguntasExpedienteWS.get(x).getDescripcionCastellano() != null) {
					WebServiceImpl.logger.info("[crearInspeccion] : 	Descripción castellano - "
							+ preguntasExpedienteWS.get(x).getDescripcionCastellano());
				}

				if (preguntasExpedienteWS.get(x).getDescripcionEuskera() != null) {
					WebServiceImpl.logger.info("[crearInspeccion] : 	Descripción euskera - "
							+ preguntasExpedienteWS.get(x).getDescripcionEuskera());
				}

				if (preguntasExpedienteWS.get(x).getIdTipoPregunta() != null) {

					switch (preguntasExpedienteWS.get(x).getIdTipoPregunta()) {
					case Constantes.TIPO_PREGUNTA_NUMERICO:
						WebServiceImpl.logger.info(
								"[crearInspeccion] : 	Tipo de pregunta - " + Constantes.TIPO_PREGUNTA_NUMERICO_STR);
						break;

					case Constantes.TIPO_PREGUNTA_FECHA:
						WebServiceImpl.logger
								.info("[crearInspeccion] : 	Tipo de pregunta - " + Constantes.TIPO_PREGUNTA_FECHA_STR);
						break;

					case Constantes.TIPO_PREGUNTA_TEXTO_LIBRE:
						WebServiceImpl.logger.info("[crearInspeccion] : 	Tipo de pregunta - "
								+ Constantes.TIPO_PREGUNTA_TEXTO_LIBRE_STR);
						break;

					case Constantes.TIPO_PREGUNTA_CORRECTO_INCORRECTO:
						WebServiceImpl.logger.info("[crearInspeccion] : 	Tipo de pregunta - "
								+ Constantes.TIPO_PREGUNTA_CORRECTO_INCORRECTO_STR);
						break;

					case Constantes.TIPO_PREGUNTA_SINO:
						WebServiceImpl.logger
								.info("[crearInspeccion] : 	Tipo de pregunta - " + Constantes.TIPO_PREGUNTA_SINO_STR);
						break;

					case Constantes.TIPO_PREGUNTA_TITULO:
						WebServiceImpl.logger
								.info("[crearInspeccion] : 	Tipo de pregunta - " + Constantes.TIPO_PREGUNTA_TITULO_STR);
						break;

					case Constantes.TIPO_PREGUNTA_CHECKBOX:
						WebServiceImpl.logger.info(
								"[crearInspeccion] : 	Tipo de pregunta - " + Constantes.TIPO_PREGUNTA_CHECKBOX_STR);

						if (preguntasExpedienteWS.get(x).getOpcionesCastellano() != null) {
							WebServiceImpl.logger.info("[crearInspeccion] : 	Opciones castellano - "
									+ preguntasExpedienteWS.get(x).getOpcionesCastellano());
						}

						if (preguntasExpedienteWS.get(x).getOpcionesEuskera() != null) {
							WebServiceImpl.logger.info("[crearInspeccion] : 	Opciones euskera - "
									+ preguntasExpedienteWS.get(x).getOpcionesEuskera());
						}

						break;

					default:
						break;
					}

				}

			}

		}

		if (usuario != null) {
			WebServiceImpl.logger.info("[crearInspeccion] : 	Usuario - " + usuario);
		}
		if (idOrigenInspeccion != null) {
			WebServiceImpl.logger.info("[crearInspeccion] : 	OrigenInspeccion - " + idOrigenInspeccion);
		}
		if (idExpedienteOrigen != null) {
			WebServiceImpl.logger.info("[crearInspeccion] : 	IdExpedienteOrigen - " + idExpedienteOrigen);
		}
		if (numDenuncia != null) {
			WebServiceImpl.logger.info("[crearInspeccion] : 	NumDenuncia - " + numDenuncia);
		}
		WebServiceImpl.logger.info("[crearInspeccion] : ***************************************");
		return serviciosWebService.crearInspeccion(folderId, objetoInspeccion, preguntasExpedienteWS, usuario,
				idOrigenInspeccion, idExpedienteOrigen, numDenuncia);
	}

	@WebMethod
	public String eliminarInspeccion(@WebParam(name = "identificadorInspeccion") String identificadorInspeccion,
			@WebParam(name = "usuario") String usuario) throws Ab79Exception {
		WebServiceImpl.logger.info("[eliminarInspeccion] : ***************************************");
		WebServiceImpl.logger.info("[eliminarInspeccion] : Parámetros de entrada WebService eliminarInspeccion AB79");
		WebServiceImpl.logger.info("[eliminarInspeccion] : ***************************************");

		if (identificadorInspeccion != null) {
			WebServiceImpl.logger
					.info("[eliminarInspeccion] :		Identificador Inspección - " + identificadorInspeccion);
		}
		if (usuario != null) {
			WebServiceImpl.logger.info("[eliminarInspeccion] :		Usuario - " + usuario);
		}
		return serviciosWebService.eliminarInspeccion(identificadorInspeccion, usuario);
	}

}
