package com.ejie.ad74a.webservices.televidaWS;

import javax.jws.HandlerChain;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;

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.ad74a.constantes.Constantes;
import com.ejie.ad74a.util.comun.UtilidadesFecha;
import com.ejie.ad74a.util.constantes.RespuestasTelevidaEnum;
import com.ejie.ad74a.ws.server.televida.model.CabeceraType;
import com.ejie.ad74a.ws.server.televida.model.Comunicacion;
import com.ejie.ad74a.ws.server.televida.model.DatosAltaInstalacionType;
import com.ejie.ad74a.ws.server.televida.model.DatosBajaBeneficiarioType;
import com.ejie.ad74a.ws.server.televida.model.DatosBajaInstalacionType;
import com.ejie.ad74a.ws.server.televida.model.DatosCambioDomicilioType;
import com.ejie.ad74a.ws.server.televida.model.DatosInstalacionType;
import com.ejie.ad74a.ws.server.televida.model.DatosModificacionType;
import com.ejie.ad74a.ws.server.televida.model.DatosPrestServicioType;
import com.ejie.ad74a.ws.server.televida.model.DatosQuejasReclamacionesType;
import com.ejie.ad74a.ws.server.televida.model.DatosValoracionInicialType;
import com.ejie.ad74a.ws.server.televida.model.Respuesta;
import com.ejie.ad74a.ws.server.televida.model.TipoComunicacionEnum;
import com.ejie.ad74a.ws.server.televida.model.ValoracionType;
import com.ejie.ad74a.ws.server.televida.service.TelevidaProccesService;

@WebService(name = "TelevidaWebService", serviceName = "TelevidaWebService", targetNamespace = "http://com.ejie.ad74a.webservice")
@SOAPBinding(style = SOAPBinding.Style.DOCUMENT, use = SOAPBinding.Use.LITERAL, parameterStyle = SOAPBinding.ParameterStyle.WRAPPED)
@HandlerChain(file = "server-handlers.xml")

public class TelevidaWebServiceImpl extends SpringBeanAutowiringSupport implements TelevidaWebService {

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


	@Autowired
	private TelevidaProccesService televidaProccesService;
	
    
	@Override
	public Respuesta valoracionInicial(@WebParam(name = "cabecera", mode = WebParam.Mode.IN) CabeceraType cabecera,@WebParam(name = "valoracion", mode = WebParam.Mode.IN) DatosValoracionInicialType valoracion) throws Exception {
		TelevidaWebServiceImpl.logger
				.debug("TelevidaWebServiceImpl - datosValoracion");
		Respuesta result = new Respuesta();
		Comunicacion comunicacion= new Comunicacion();
		comunicacion.setCabecera(cabecera);
		comunicacion.setDatosValoracionInicial(valoracion);
		comunicacion.getCabecera().setTipoComunicacion(TipoComunicacionEnum.VALORACION);

		try {
			result = this.televidaProccesService.proccesMessage(comunicacion);			
		}catch (Throwable e) {
			e.printStackTrace();
			TelevidaWebServiceImpl.logger.error("TelevidaWebServiceImpl - datosValoracion: " + e.getMessage());
			result = RespuestasTelevidaEnum.ERROR_GENERICO.getRespuesta();
			result.setMensaje(e.getMessage());
		}
		
		return result;
	}
	
	@Override
	public Respuesta altaInstalacion(@WebParam(name = "cabecera", mode = WebParam.Mode.IN) CabeceraType cabecera ,@WebParam(name = "altaInstalacion", mode = WebParam.Mode.IN) DatosInstalacionType datosInstalacion ) throws Exception {
		TelevidaWebServiceImpl.logger
				.debug("TelevidaWebServiceImpl - altaInstalacion");
		Respuesta result = new Respuesta();
		Comunicacion comunicacion= new Comunicacion();
		comunicacion.setCabecera(cabecera);
		DatosAltaInstalacionType datosAltaInstalacion = new DatosAltaInstalacionType();
		datosAltaInstalacion.setDatosInstalacion(datosInstalacion);
		comunicacion.setDatosAltaInstalacion(datosAltaInstalacion);
		comunicacion.getCabecera().setTipoComunicacion(TipoComunicacionEnum.ALTA_INSTALACION);
		
		try {
			result = this.televidaProccesService.proccesMessage(comunicacion);			
		}catch (Throwable e) {
			e.printStackTrace();
			TelevidaWebServiceImpl.logger.error("TelevidaWebServiceImpl - altaInstalacion: " + e.getMessage());
			result = RespuestasTelevidaEnum.ERROR_GENERICO.getRespuesta();
			result.setMensaje(e.getMessage());
		}
		
		return result;
	}
	
	@Override
	public Respuesta modificacion(@WebParam(name = "cabecera", mode = WebParam.Mode.IN) CabeceraType cabecera ,@WebParam(name = "modificacion", mode = WebParam.Mode.IN) DatosModificacionType modificacion) throws Exception {
		TelevidaWebServiceImpl.logger
				.debug("TelevidaWebServiceImpl - modificacion");
		Respuesta result = new Respuesta();
		Comunicacion comunicacion= new Comunicacion();
		comunicacion.setCabecera(cabecera);
		comunicacion.setDatosModificacion(modificacion);
		comunicacion.getCabecera().setTipoComunicacion(TipoComunicacionEnum.UPDATE);
		
		try {
			result = this.televidaProccesService.proccesMessage(comunicacion);			
		}catch (Throwable e) {
			e.printStackTrace();
			TelevidaWebServiceImpl.logger.error("TelevidaWebServiceImpl - modificacion: " + e.getMessage());
			result = RespuestasTelevidaEnum.ERROR_GENERICO.getRespuesta();
			result.setMensaje(e.getMessage());
		}
		
		return result;
	}

	@Override
	public Respuesta cambioDomicilio(@WebParam(name = "cabecera", mode = WebParam.Mode.IN) CabeceraType cabecera , @WebParam(name = "cambioDomicilio", mode = WebParam.Mode.IN) DatosCambioDomicilioType cambioDomicilio) throws Exception {
		TelevidaWebServiceImpl.logger
				.debug("TelevidaWebServiceImpl - cambioDomicilio");
		Respuesta result = new Respuesta();
		Comunicacion comunicacion= new Comunicacion();
		comunicacion.setCabecera(cabecera);
		comunicacion.setDatosCambioDomicilio(cambioDomicilio);
		comunicacion.getCabecera().setTipoComunicacion(TipoComunicacionEnum.CAMBIO_DOMICILIO);
		
		try {
			result = this.televidaProccesService.proccesMessage(comunicacion);			
		}catch (Throwable e) {
			e.printStackTrace();
			TelevidaWebServiceImpl.logger.error("TelevidaWebServiceImpl - cambioDomicilio: " + e.getMessage());
			result = RespuestasTelevidaEnum.ERROR_GENERICO.getRespuesta();
			result.setMensaje(e.getMessage());
		}
		
		return result;
	}

	@Override
	public Respuesta prestacionServicio(@WebParam(name = "cabecera", mode = WebParam.Mode.IN) CabeceraType cabecera ,@WebParam(name = "prestacionServicio", mode = WebParam.Mode.IN) DatosPrestServicioType prestacionServicio) throws Exception {
		TelevidaWebServiceImpl.logger
				.debug("TelevidaWebServiceImpl - prestacionServicio");
		Respuesta result = new Respuesta();
		Comunicacion comunicacion= new Comunicacion();
		comunicacion.setCabecera(cabecera);
		comunicacion.setDatosPrestServicio(prestacionServicio);
		comunicacion.getCabecera().setTipoComunicacion(TipoComunicacionEnum.PRESTACION);
		
		try {
			result = this.televidaProccesService.proccesMessage(comunicacion);			
		}catch (Throwable e) {
			e.printStackTrace();
			TelevidaWebServiceImpl.logger.error("TelevidaWebServiceImpl - prestacionServicio: " + e.getMessage());
			result = RespuestasTelevidaEnum.ERROR_GENERICO.getRespuesta();
			result.setMensaje(e.getMessage());
		}
		return result;
	}

	@Override
	public Respuesta bajaPrestador(@WebParam(name = "cabecera", mode = WebParam.Mode.IN) CabeceraType cabecera ,@WebParam(name = "bajaPrestador", mode = WebParam.Mode.IN) DatosBajaBeneficiarioType bajaPrestador) throws Exception {
		TelevidaWebServiceImpl.logger
				.debug("TelevidaWebServiceImpl - bajaPrestador");
		Respuesta result = new Respuesta();
		Comunicacion comunicacion= new Comunicacion();
		comunicacion.setCabecera(cabecera);
		comunicacion.setDatosBajaBeneficiario(bajaPrestador);
		comunicacion.getCabecera().setTipoComunicacion(TipoComunicacionEnum.BAJA_BENEFICIARIO);

		try {
			result = this.televidaProccesService.proccesMessage(comunicacion);			
		}catch (Throwable e) {
			e.printStackTrace();
			TelevidaWebServiceImpl.logger.error("TelevidaWebServiceImpl - bajaPrestador: " + e.getMessage());
			result = RespuestasTelevidaEnum.ERROR_GENERICO.getRespuesta();
			result.setMensaje(e.getMessage());
		}
		
		return result;
	}

	@Override
	public Respuesta bajaInstalacion(@WebParam(name = "cabecera", mode = WebParam.Mode.IN) CabeceraType cabecera ,@WebParam(name = "bajaInstalacion", mode = WebParam.Mode.IN) DatosBajaInstalacionType bajaInstalacion) throws Exception {
		TelevidaWebServiceImpl.logger
				.debug("TelevidaWebServiceImpl - bajaInstalacion");
		Respuesta result = new Respuesta();
		Comunicacion comunicacion= new Comunicacion();
		comunicacion.setCabecera(cabecera);
		comunicacion.setDatosBajaInstalacion(bajaInstalacion);
		comunicacion.getCabecera().setTipoComunicacion(TipoComunicacionEnum.BAJA_INSTALACION);

		try {
			result = this.televidaProccesService.proccesMessage(comunicacion);			
		}catch (Throwable e) {
			e.printStackTrace();
			TelevidaWebServiceImpl.logger.error("TelevidaWebServiceImpl - bajaInstalacion: " + e.getMessage());
			result = RespuestasTelevidaEnum.ERROR_GENERICO.getRespuesta();
			result.setMensaje(e.getMessage());
		}
		
		return result;
	}

	@Override
	public Respuesta quejas(@WebParam(name = "cabecera", mode = WebParam.Mode.IN) CabeceraType cabecera ,@WebParam(name = "quejas", mode = WebParam.Mode.IN) DatosQuejasReclamacionesType quejas) throws Exception {
		TelevidaWebServiceImpl.logger
				.debug("TelevidaWebServiceImpl - quejas");
		Respuesta result = new Respuesta();
		Comunicacion comunicacion= new Comunicacion();
		comunicacion.setCabecera(cabecera);
		comunicacion.setDatosQuejasReclamaciones(quejas);
		comunicacion.getCabecera().setTipoComunicacion(TipoComunicacionEnum.QUEJAS_RECLAMACIONES);

		try {
			result = this.televidaProccesService.proccesMessage(comunicacion);			
		}catch (Throwable e) {
			e.printStackTrace();
			TelevidaWebServiceImpl.logger.error("TelevidaWebServiceImpl - quejas: " + e.getMessage());
			result = RespuestasTelevidaEnum.ERROR_GENERICO.getRespuesta();
			result.setMensaje(e.getMessage());
		}

		return result;
	}


}
