package com.ejie.ab61.tramita.transformer;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang.StringUtils;

import com.ejie.ab61.clientesWS.pid.W43DfAttribute;
import com.ejie.ab61.clientesWS.pid.W43DfDocument;
import com.ejie.ab61.comun.Constantes.PIDTurismo;
import com.ejie.ab61.model.documento.Documento;
import com.ejie.ab61.model.documento.Documento.Tipologia;

/**
 * PidAdapterServiceImpl Contiene metodos para crear el resultado de la
 * invocacion a los WebServices de PID
 *
 *  
 */
public final class PidTransformer {

	/**
	 * Constructor
	 */
	private PidTransformer() {
		super();
	}

	/**
	 * transformInsertarDocumento Metodo que transforma el resultado de la
	 * llamada al PID para el metodo insertarDocumento
	 *
	 * @param rdoInsertarDocumento
	 *            String
	 * @return String IdDocumento
	 *
	 */
	public static String transformInsertarDocumento(String rdoInsertarDocumento) {
		return rdoInsertarDocumento;
	}

	/**
	 * transformRecuperarDocumento Metodo que transforma el resultado de la
	 * llamada al PID para el metodo recuperarDocumento
	 * 
	 * @param rdoRecuperarDocumento
	 *            W43DfDocument
	 * @return Documento documento
	 */
	public static Documento transformRecuperarDocumento(W43DfDocument rdoRecuperarDocumento) {
		Documento documento = new Documento();

		String nombre = "";
		String extension = "";

		documento.setIdPID(rdoRecuperarDocumento.getId());

		documento.setTipologia(Tipologia.INICIATIVA_TURISMO);

		if (rdoRecuperarDocumento.getContent() != null) {
			if (rdoRecuperarDocumento.getContent().getFormat() != null) {
				if (!StringUtils.isEmpty(rdoRecuperarDocumento.getContent().getFormat().getDescription())) {
					documento.setDescripcionFormato(rdoRecuperarDocumento.getContent().getFormat().getDescription());
				}
				if (!StringUtils.isEmpty(rdoRecuperarDocumento.getContent().getFormat().getMimeType())) {
					documento.setContentType(rdoRecuperarDocumento.getContent().getFormat().getMimeType());
				}
				if (!StringUtils.isEmpty(rdoRecuperarDocumento.getContent().getFormat().getExtension())) {
					extension = rdoRecuperarDocumento.getContent().getFormat().getExtension();
				}
			}
			documento.setLength(rdoRecuperarDocumento.getContent().getLength());
			if (!StringUtils.isEmpty(rdoRecuperarDocumento.getContent().getPath())) {
				documento.setPathPIF(rdoRecuperarDocumento.getContent().getPath());
			}
		}

		if (rdoRecuperarDocumento.getAttributes() != null && !rdoRecuperarDocumento.getAttributes().isEmpty()) {
			Map<String, ArrayList<String>> metadatos = new HashMap<String, ArrayList<String>>();
			for (W43DfAttribute w43DfAttribute : rdoRecuperarDocumento.getAttributes()) {
				String metadatoName = w43DfAttribute.getKey();
				ArrayList<String> metadatoValues = (ArrayList<String>) w43DfAttribute.getValues();
				metadatos.put(metadatoName, metadatoValues);
				// Recuperamos el nombre
				if (rdoRecuperarDocumento.getType().equals(Tipologia.INICIATIVA_TURISMO.getName())) {
					if (metadatoName.equals(PIDTurismo.Metadata.OBJECTNAME)) {
						nombre = metadatoValues.get(0);
					}
				}
			}
			documento.setMetadatos(metadatos);
		}

		// Creamos nombre.extension
		if (!StringUtils.isEmpty(nombre) && !StringUtils.isEmpty(extension)) {
			documento.setNombre(nombre + "." + extension);
		} else {
			if (rdoRecuperarDocumento.getContent() != null
					&& !StringUtils.isEmpty(rdoRecuperarDocumento.getContent().getPath())) {
				documento.setNombre(FilenameUtils.getName(documento.getPathPIF()));
			}
		}

		return documento;
	}
}
