package com.ejie.ad74a.service.test.basic;

import static org.junit.Assert.assertTrue;

import java.math.BigDecimal;
import java.text.ParseException;

import javax.xml.datatype.DatatypeConfigurationException;

import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.annotation.Rollback;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import com.ejie.ad74a.model.Expedientes;
import com.ejie.ad74a.model.Solicitantes;
import com.ejie.ad74a.ws.client.prestadorWS.data.ActualizacionDatosDssResponse;
import com.ejie.ad74a.ws.client.prestadorWS.data.AltaPersonaBeneficiariaResponse;
import com.ejie.ad74a.ws.client.prestadorWS.data.BajaPersonaBeneficiariaResponse;
import com.ejie.ad74a.ws.client.prestadorWS.data.CambioDomicilioResponse;
import com.ejie.ad74a.ws.client.prestadorWS.data.RecepcionPeticionAd74AResponse;
import com.ejie.ad74a.ws.client.prestadorWS.service.PrestadorWSService;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:test/application-context.xml")
public class TestPrestadorService {

	@Autowired
	private PrestadorWSService prestadorWSService;

	@Test
	@Transactional(propagation = Propagation.NOT_SUPPORTED)
	@Rollback(false)
	public void testEnviarTodo() throws DatatypeConfigurationException {
		try {
			this.testEnviarAlta();
			this.testEnviarBaja();
			this.testEnviarModificacion();
			this.testEnviarCambioDomicilio();
			this.testEnviarRecepcionPeticion();
		} catch (Throwable e) {
			e.printStackTrace();
			Assert.fail("Error en petición alta");
		}
	}

	@Test
	@Transactional(propagation = Propagation.NOT_SUPPORTED)
	@Rollback(false)
	public void testEnviarAlta() throws DatatypeConfigurationException {
		try {
			Solicitantes solicitante = new Solicitantes();
//			solicitante.setIdSolicitante01(160584L);
//			solicitante.setIdSolicitante01(318631L);
//			solicitante.setIdSolicitante01(321409L);
			solicitante.setIdSolicitante01(321378L);
			Expedientes expediente = new Expedientes();
//			expediente.setIdExpediente00(216950L);
//			expediente.setIdExpediente00(547841L);
//			expediente.setIdExpediente00(651188L);
			expediente.setIdExpediente00(651144L);
			AltaPersonaBeneficiariaResponse respuestaAlta = this.prestadorWSService.enviarAlta(solicitante, expediente);

			System.out.println("ALTA");
			System.out.println(respuestaAlta.getRespuesta().getCodError());
			System.out.println(respuestaAlta.getRespuesta().getDescError());

			assertTrue("Fin petición alta", 1 == 1);
		} catch (Throwable e) {
			e.printStackTrace();
			Assert.fail("Error en petición alta");
		}
	}

	@Test
	@Transactional(propagation = Propagation.NOT_SUPPORTED)
	@Rollback(false)
	public void testEnviarModificacion() throws DatatypeConfigurationException {
		try {
			Solicitantes solicitante = new Solicitantes();
			solicitante.setIdSolicitante01(321378L);
			Expedientes expediente = new Expedientes();
			expediente.setIdExpediente00(651144L);

			ActualizacionDatosDssResponse respuestaActualizacionDatosDss = this.prestadorWSService
					.enviarModificacion(solicitante, expediente);

			System.out.println("UPDATE");
			System.out.println(respuestaActualizacionDatosDss.getRespuesta().getCodError());
			System.out.println(respuestaActualizacionDatosDss.getRespuesta().getDescError());

			assertTrue("Fin petición Modificacion", 1 == 1);
		} catch (Throwable e) {
			e.printStackTrace();
			Assert.fail("Error en petición Modificacion");
		}
	}

	@Test
	@Transactional(propagation = Propagation.NOT_SUPPORTED)
	@Rollback(false)
	public void testEnviarCambioDomicilio() throws ParseException, DatatypeConfigurationException {
		try {
			Solicitantes solicitante = new Solicitantes();
			solicitante.setIdSolicitante01(321378L);
			Expedientes expediente = new Expedientes();
			expediente.setIdExpediente00(651144L);

			CambioDomicilioResponse respuestaCambioDomicilio = this.prestadorWSService
					.enviarCambioDomicilio(solicitante, expediente);
//
			System.out.println("DOMICILIO");
			System.out.println(respuestaCambioDomicilio.getRespuesta().getCodError());
			System.out.println(respuestaCambioDomicilio.getRespuesta().getDescError());

			assertTrue("Fin petición CambioDomicilio", 1 == 1);
		} catch (Throwable e) {
			e.printStackTrace();
			Assert.fail("Error en petición CambioDomicilio");
		}
	}

	@Test
	@Transactional(propagation = Propagation.NOT_SUPPORTED)
	@Rollback(false)
	public void testEnviarBaja() throws DatatypeConfigurationException {
		try {
			Solicitantes solicitante = new Solicitantes();
			solicitante.setIdSolicitante01(321091L);
			Expedientes expediente = new Expedientes();
			expediente.setIdExpediente00(650558L);

			BajaPersonaBeneficiariaResponse respuestaBaja = this.prestadorWSService.enviarBaja(solicitante, expediente);

			System.out.println("BAJA");
			System.out.println(respuestaBaja.getRespuesta().getCodError());
			System.out.println(respuestaBaja.getRespuesta().getDescError());

			assertTrue("Fin petición Baja", 1 == 1);
		} catch (Throwable e) {
			e.printStackTrace();
			Assert.fail("Error en petición Baja");
		}
	}

	@Test
	@Transactional(propagation = Propagation.NOT_SUPPORTED)
	@Rollback(false)
	public void testEnviarRecepcionPeticion() throws DatatypeConfigurationException {
		try {
			Solicitantes solicitante = new Solicitantes();
			solicitante.setIdSolicitante01(321378L);
			Expedientes expediente = new Expedientes();
			expediente.setIdExpediente00(651144L);

			RecepcionPeticionAd74AResponse respuestaRecepcionPeticion = this.prestadorWSService
					.enviarRecepcionPeticionAd74A(BigDecimal.valueOf(1), BigDecimal.valueOf(2));
			System.out.println("RecepcionPeticion");
			System.out.println(respuestaRecepcionPeticion.getRespuesta().getCodRespuesta());
			System.out.println(respuestaRecepcionPeticion.getRespuesta().getMensaje());

			assertTrue("Fin petición RecepcionPeticion", 1 == 1);
		} catch (Throwable e) {
			e.printStackTrace();
			Assert.fail("Error en petición RecepcionPeticion");
		}
	}
}
