package com.ejie.ad74a.service.interoperabilidad;

import java.time.LocalDate;
import java.util.Properties;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.ejie.ad74a.exceptions.ManagerErrors;
import com.ejie.ad74a.ws.client.platea.expedienteElectronico.TAuthorizationTraceType;
import com.ejie.ad74a.ws.client.platea.expedienteElectronico.TPersonIDName;
import com.ejie.ad74a.ws.client.platea.expedienteElectronico.X43REEPortType;

@Service(value = "Interoperabilidad")
public class InteroperabilidadServiceImpl implements InteroperabilidadService {

	/**
	 * Final static logger.
	 */
	private static final Logger logger = LoggerFactory.getLogger(InteroperabilidadServiceImpl.class);

	@Autowired
	private X43REEPortType x43REEPortType;

	@Autowired
	private Properties appConfiguration;

	private InteroperabilidadServiceImpl() {
		super();
	}

	public String getAuthorizationTrace(String authorizationID, String iopTraceID, String documentPath,
			TAuthorizationTraceType authorizationTraceType, TPersonIDName senderID) {
		InteroperabilidadServiceImpl.logger
				.info("[InteroperabilidadServiceImpl] - getAuthorizationTrace Inicio - authorizationID: "
						+ authorizationID + " - iopTraceID: " + iopTraceID + " - documentPath: " + documentPath);
		String result = "";
		try {
			com.ejie.ad74a.ws.client.platea.expedienteElectronico.AExtensionPoint ep = new com.ejie.ad74a.ws.client.platea.expedienteElectronico.AExtensionPoint();

			result = this.x43REEPortType.getAuthorizationTrace(authorizationID, iopTraceID, documentPath,
					authorizationTraceType, senderID, ep);

			InteroperabilidadServiceImpl.logger
					.info("[InteroperabilidadServiceImpl] - getAuthorizationTrace Fin Resultado: " + result);
		} catch (Throwable e) {
			ManagerErrors.manageException(e, "Error al recuperar el certificado de traza");
		}
		return result;
	}

	/**
	 * Calcula el anyo para consultar la interoperabilidad del IRPF
	 * 
	 * - Si el dia en curso es menor o igual al 30 de julio, el anyo es el actual
	 * menos 2
	 * 
	 * - Si el dia en curso es mayor al 30 de julio, el anyo es el actual menos 1
	 */
	public String getIRPFYear() {
		InteroperabilidadServiceImpl.logger.info("[InteroperabilidadServiceImpl] - getIRPFYear Inicio");

		int dia = Integer.parseInt(this.appConfiguration.getProperty("consulta.irpf.dia"));
		int mes = Integer.parseInt(this.appConfiguration.getProperty("consulta.irpf.mes"));

		LocalDate dateSistema = LocalDate.now();
		int yearResult = dateSistema.getYear();

		LocalDate fechaComp = LocalDate.of(dateSistema.getYear(), mes, dia);
		if (dateSistema.compareTo(fechaComp) < 1) {
			System.out.println("fecha en curso menor o igual");
			yearResult = yearResult - 2;
		} else {
			System.out.println("fecha en curso mayor");
			yearResult = yearResult - 1;
		}
		InteroperabilidadServiceImpl.logger
				.info("[InteroperabilidadServiceImpl] - getIRPFYear Resultado: " + yearResult);
		return String.valueOf(yearResult);
	}

}