package com.ejie.ad74a.util.documentos;

import java.text.ParseException;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.i18n.LocaleContextHolder;

import com.ejie.ad74a.model.Documento;
import com.ejie.ad74a.model.DocumentosTarea;
import com.ejie.ad74a.util.comun.UtilidadesFecha;
import com.ejie.ad74a.util.constantes.Constantes;
import com.ejie.ad74a.ws.client.platea.expedienteElectronico.TDocument;
import com.ejie.ad74a.ws.client.platea.expedienteElectronico.TProcedingDocument;
import com.ejie.ad74a.ws.client.platea.expedienteElectronico.TStringI18N;

/**
 * Agrupa utilidades para ficheros
 * 
 * @author
 * 
 */
public class DocumentosPlateaUtils {

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

	/**
	 * Constructor privado
	 */
	private DocumentosPlateaUtils() {
	}

	public static String getValueFromText(com.ejie.ad74a.ws.client.platea.expedienteElectronico.TTextI18N text,
			com.ejie.ad74a.ws.client.platea.expedienteElectronico.TLanguage lenguaje) {
		String resultado = "";
		if (null != text && null != text.getText() && text.getText().size() > 1) {
			for (com.ejie.ad74a.ws.client.platea.expedienteElectronico.TStringI18N t : text.getText()) {
				if (t.getLocale().equals(lenguaje)) {
					resultado = t.getValue();
					break;
				}
			}
		}
		return resultado;
	}

	public static com.ejie.ad74a.ws.client.platea.tareasTramitacion.TTextI18N setValueToText(String textEs,
			String textEu) {
		com.ejie.ad74a.ws.client.platea.tareasTramitacion.TTextI18N textI18 = new com.ejie.ad74a.ws.client.platea.tareasTramitacion.TTextI18N();
		com.ejie.ad74a.ws.client.platea.tareasTramitacion.TStringI18N stringI18Es = new com.ejie.ad74a.ws.client.platea.tareasTramitacion.TStringI18N();
		stringI18Es.setValue(textEs);
		stringI18Es.setLocale(com.ejie.ad74a.ws.client.platea.tareasTramitacion.TLanguage.ES);
		textI18.getText().add(stringI18Es);

		com.ejie.ad74a.ws.client.platea.tareasTramitacion.TStringI18N stringI18Eu = new com.ejie.ad74a.ws.client.platea.tareasTramitacion.TStringI18N();
		stringI18Eu.setValue(textEu);
		stringI18Eu.setLocale(com.ejie.ad74a.ws.client.platea.tareasTramitacion.TLanguage.EU);
		textI18.getText().add(stringI18Eu);

		return textI18;
	}

	public static DocumentosTarea getDocEntidadFromPlateaDocInteroper(TDocument docFolderAuth, String folderNumber)
			throws ParseException {
		DocumentosTarea documento = null;
		if (null != docFolderAuth) {
			documento = new DocumentosTarea();
			documento.setTipoDocumentoDescEs(getValueFromText(docFolderAuth.getDocumentTypeName(),
					com.ejie.ad74a.ws.client.platea.expedienteElectronico.TLanguage.ES));
			documento.setTipoDocumentoDescEu(getValueFromText(docFolderAuth.getDocumentTypeName(),
					com.ejie.ad74a.ws.client.platea.expedienteElectronico.TLanguage.EU));
			documento.setDescripcionEs(getValueFromText(docFolderAuth.getDocumentRoleName(),
					com.ejie.ad74a.ws.client.platea.expedienteElectronico.TLanguage.ES));
			documento.setDescripcionEu(getValueFromText(docFolderAuth.getDocumentRoleName(),
					com.ejie.ad74a.ws.client.platea.expedienteElectronico.TLanguage.EU));

			documento.setRoleID(docFolderAuth.getDocumentRoleID());

			documento.setFechaDocumento(UtilidadesFecha.parsearFechaPlatea(docFolderAuth.getDocumentDate()));
			documento.setNombreDocumento(docFolderAuth.getSourceName());
			documento.setNumExpediente(folderNumber);
			documento.setOidDocumento(docFolderAuth.getDokusiID());

			if (docFolderAuth.getAuthorization() != null) {
				documento.setEstado(docFolderAuth.getAuthorization().getStatus().value());
				documento.setIopTraceID(docFolderAuth.getAuthorization().getIopTraceID());
				documento.setAuthorizationID(docFolderAuth.getAuthorization().getAuthorizationID());
				documento.setConServicioIOP(null != docFolderAuth.getAuthorization().getIopTraceID());
				if (null != docFolderAuth.getAuthorization().getIopResultDesc()) {
					documento.setInvocationResult(getValueFromText(docFolderAuth.getAuthorization().getIopResultDesc(),
							com.ejie.ad74a.ws.client.platea.expedienteElectronico.TLanguage.ES));
				}
				if (null != docFolderAuth.getAuthorization().getInvocationDate()) {
					documento.setInvocationTimestamp(UtilidadesFecha.formatearDateToStringFormatoTime(
							UtilidadesFecha.formatearStringToDateFormato(
									docFolderAuth.getAuthorization().getInvocationDate(),
									Constantes.DATE_FORMAT_PLATEA_XML_EVENTS),
							LocaleContextHolder.getLocale().getLanguage()));

				}

			}

			documento.setTipoDocumento(Constantes.TIPO_DOCUMENTO_CONSENTIMIENTO);

		}
		return documento;
	}

	public static DocumentosTarea getDocEntidadFromPlateaDocGenerated(TProcedingDocument docFolder,
			String folderNumber) {
		DocumentosTarea documento = null;
		if (null != docFolder) {
			documento = new DocumentosTarea();
			documento.setTipoDocumentoDescEs(getValueFromText(docFolder.getDocumentRoleName(),
					com.ejie.ad74a.ws.client.platea.expedienteElectronico.TLanguage.ES));
			documento.setTipoDocumentoDescEu(getValueFromText(docFolder.getDocumentRoleName(),
					com.ejie.ad74a.ws.client.platea.expedienteElectronico.TLanguage.EU));
			documento.setDescripcionEs(getValueFromText(docFolder.getDocumentRoleName(),
					com.ejie.ad74a.ws.client.platea.expedienteElectronico.TLanguage.ES));
			documento.setDescripcionEu(getValueFromText(docFolder.getDocumentRoleName(),
					com.ejie.ad74a.ws.client.platea.expedienteElectronico.TLanguage.EU));
			if (docFolder.getAnnulment() == null) {
				documento.setEstado("VIGENTE");
			} else {
				documento.setEstado("ANULADO");
			}
//			documento.setFechaDocumento(UtilidadesPlateaService.parsearFechaPlatea(docFolder.get()));
			documento.setNombreDocumento(docFolder.getSourceName());
			documento.setNumExpediente(folderNumber);
			documento.setOidDocumento(docFolder.getDokusiID());
			documento.setTipoDocumento(Constantes.TIPO_DOCUMENTO_GENERADO);

		}
		return documento;
	}

}