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

import static org.junit.Assert.assertTrue;

import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
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.constantes.Constantes;
import com.ejie.ad74a.util.comun.UtilidadesFecha;
import com.ejie.ad74a.ws.client.liquidaciones.CabeceraType;
import com.ejie.ad74a.ws.client.liquidaciones.ConceptoType;
import com.ejie.ad74a.ws.client.liquidaciones.DatosDireccionType;
import com.ejie.ad74a.ws.client.liquidaciones.DatosEmisionType;
import com.ejie.ad74a.ws.client.liquidaciones.DatosEmisionType.Conceptos;
import com.ejie.ad74a.ws.client.liquidaciones.DatosIdentificacionType;
import com.ejie.ad74a.ws.client.liquidaciones.LiquidacionesService;
import com.ejie.ad74a.ws.client.liquidaciones.RespuestaType;
import com.ejie.ad74a.ws.client.liquidaciones.TipoOperacionEnum;

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

	@Autowired
	private LiquidacionesService liquidacionesService;

	@Test
	@Transactional(propagation = Propagation.REQUIRES_NEW)

	// @Rollback(true)
	public void testEmitirBeneficiario() {
		try {
			CabeceraType cabecera = new CabeceraType();
			cabecera.setTipoOperacion(TipoOperacionEnum.EMITIR);
			cabecera.setFComunicacion(UtilidadesFecha.getFechaSistema().toString());
			cabecera.setUsuario(Constantes.COD_APLICACION);

			DatosEmisionType datosEmision = new DatosEmisionType();
			datosEmision.setTipoIngreso("TLIMP");

			ConceptoType conceptoType = new ConceptoType();
			conceptoType.setIdConcepto(2);
			conceptoType.setImporte(400);
			Conceptos conceptos = new Conceptos();
			conceptos.getConcepto().add(conceptoType);
			datosEmision.setConceptos(conceptos);

			datosEmision.setOrigen("prueba");
			// datosEmision.setImporte

			datosEmision.setFLimitePago("24/09/2024");
			datosEmision.setExpediente("TL_TEST_1");
			datosEmision.setConcepto("concepto");
			datosEmision.setTerritorio(1);

			DatosIdentificacionType datosIdentificacionType = new DatosIdentificacionType();
			datosIdentificacionType.setTipoIdentificador(2);
			datosIdentificacionType.setIdentificador("96131011G");
			datosIdentificacionType.setNombre("ALBERTO");
			datosIdentificacionType.setApellido1("PRUEBA");
			datosIdentificacionType.setApellido2("PRUEBA");
			datosEmision.setDatosIdentificacion(datosIdentificacionType);

			DatosDireccionType datosDireccionType = new DatosDireccionType();
			datosDireccionType.setResidente(1);
			datosDireccionType.setProvincia("01");
			datosDireccionType.setMunicipio("051");
			datosDireccionType.setCodLocalidad(Long.valueOf("10105100000073"));
			datosDireccionType.setLocalidad("Agurain - Salvatierra");
			datosDireccionType.setTipoVia("CL");
			datosDireccionType.setCalle("Alangua");
			datosDireccionType.setPortal("1");
			datosDireccionType.setLetra("C");
			datosDireccionType.setPiso("2");
			datosDireccionType.setCodigoPostal("01200");
			datosEmision.setDatosDireccion(datosDireccionType);

			RespuestaType respuesta = this.liquidacionesService.emitirLiquidacion(cabecera, datosEmision);
			System.out.println("Liquidación emitida correctamente");
			assertTrue("Liquidación emitida correctamente", respuesta.getCodRespuesta() != null);
		} catch (Throwable e) {
			e.printStackTrace();
			Assert.fail("Error al emitir la liquidación");
		}
	}

//  @Test
//  @Transactional(propagation = Propagation.REQUIRES_NEW)
//  public void testEmitirAyuntamiento() {
//
//      Direcciones direccion = new Direcciones();
//      direccion.setIdProvincia06("01");
//      direccion.setIdMunicipio06("059");
//      direccion.setIdLocalidad06(10105900000734L);
//      direccion.setIdCalle06(130105900005600L);
//      direccion.setIdPortal06(80105900001243L);
//      direccion.setPiso06("1");
//      List<PisosTutelados> listPisos = this.pisosTuteladosDao.isPisoTutelado(direccion);
//      System.out.println("Total: " + listPisos.size());
//      assertTrue("No se ha recuperado el solicitante", listPisos.size() > 0);
//  }

}