package com.ejie.ab79.comun;

import com.ejie.ab79.model.ActuacionesJson;
import com.ejie.ab79.model.DocumentosJson;
import com.ejie.ab79.model.EnviosJson;
import com.ejie.ab79.model.InspeccionesJson;
import com.ejie.ab79.model.PreguntasJson;
import com.fasterxml.jackson.databind.ObjectMapper;

/**
 * Clase que que genera modelos para las tablas *_JSON.
 * 
 *  
 */
public class TrazabilidadUtils {

	/**
	 * Constructor privado.
	 */
	private TrazabilidadUtils() {
	}

	/**
	 * Método de traceo de la respuesta de un metodo.
	 * 
	 * @param origen
	 *            String
	 * @param destino
	 *            String
	 * @param idInspector
	 *            String
	 * @param usuario
	 *            Integer
	 * @param estado
	 *            Integer
	 * @param metodo
	 *            String
	 * @param json
	 *            Object
	 * @return EnviosJson
	 */
	public static EnviosJson guardadoEnviosJson(String origen, String destino, Integer idInspector, String usuario,
			Integer estado, String metodo, Object json, String error) {
		EnviosJson envioJson = new EnviosJson();
		envioJson.setUsuarioRegistro(usuario);
		envioJson.setIdInspector(idInspector);
		envioJson.setAplicacionOrigen(origen);
		envioJson.setAplicacionDestino(destino);
		envioJson.setEstado(estado); // 1: Correcto, 2: Error.
		envioJson.setMetodo(metodo);
		envioJson.setError(error);

		try {
			ObjectMapper mapper = new ObjectMapper();
			String jsonString = mapper.writeValueAsString(json);
			envioJson.setJson(jsonString);
		} catch (Exception e) {
		}

		return envioJson;
	}

	/**
	 * Método de traceo de la respuesta de un metodo.
	 * 
	 * @param idEnvio
	 *            Integer
	 * @param idInspeccion
	 *            Integer
	 * @param idInspeccionMovil
	 *            Integer
	 * @param usuario
	 *            String
	 * @param estado
	 *            Integer
	 * @param excepcion
	 *            Exception
	 * @return InspeccionesJson
	 */
	public static InspeccionesJson guardadoInspeccionesJson(Integer idEnvio, Integer idInspeccion,
			String idInspeccionMovil, String usuario, Integer estado, String excepcion) {
		InspeccionesJson inspeccionJson = new InspeccionesJson();
		inspeccionJson.setIdInspeccion(idInspeccion);
		inspeccionJson.setEnviosJson(new EnviosJson(idEnvio));
		if (idInspeccionMovil != null) {
			inspeccionJson.setIdInspeccionMovil(idInspeccionMovil);
		}
		inspeccionJson.setEstado(estado); // 1: Correcto, 2: Error.
		inspeccionJson.setUsuarioRegistro(usuario);
		if (excepcion != null) {
			inspeccionJson.setError(excepcion);
		}

		return inspeccionJson;
	}

	/**
	 * Método de traceo de la respuesta de un metodo.
	 * 
	 * @param idInspeccionJson
	 *            Integer
	 * @param idActuacionMovil
	 *            Integer
	 * @param usuario
	 *            String
	 * @param estado
	 *            Integer
	 * @param excepcion
	 *            Exception
	 * @return ActuacionesJson
	 */
	public static ActuacionesJson guardadoActuacionesJson(Integer idInspeccionJson, String idActuacionMovil,
			String usuario, Integer estado, String excepcion) {
		ActuacionesJson actuacionJson = new ActuacionesJson();

		actuacionJson.setInspeccionesJson(new InspeccionesJson(idInspeccionJson));
		if (idActuacionMovil != null) {
			actuacionJson.setIdActuacionMovil(idActuacionMovil);
		}
		actuacionJson.setEstado(estado);
		actuacionJson.setUsuarioRegistro(usuario);
		if (excepcion != null) {
			actuacionJson.setError(excepcion);
		}

		return actuacionJson;
	}

	/**
	 * Método de traceo de la respuesta de un metodo.
	 * 
	 * @param idInspeccionJson
	 *            Integer
	 * @param idPreguntaProtocolo
	 *            Integer
	 * @param idPreguntaExpediente
	 *            Integer
	 * @param idPreguntaMovil
	 *            Integer
	 * @param usuario
	 *            String
	 * @param estado
	 *            Integer
	 * @param excepcion
	 *            Exception
	 * @return ActuacionesJson
	 */
	public static PreguntasJson guardadoPreguntasJson(Integer idInspeccionJson, Integer idPreguntaProtocolo,
			Integer idPreguntaExpediente, String idPreguntaMovil, String usuario, Integer estado, String excepcion) {
		PreguntasJson preguntaJson = new PreguntasJson();

		preguntaJson.setInspeccionesJson(new InspeccionesJson(idInspeccionJson));
		preguntaJson.setIdPreguntaProtocolo(idPreguntaProtocolo);
		preguntaJson.setIdPreguntaExpediente(idPreguntaExpediente);
		if (idPreguntaMovil != null) {
			preguntaJson.setIdPreguntaMovil(idPreguntaMovil);
		}
		preguntaJson.setEstado(estado);
		preguntaJson.setUsuarioRegistro(usuario);
		if (excepcion != null) {
			preguntaJson.setError(excepcion);
		}

		return preguntaJson;
	}

	/**
	 * Método de traceo de la respuesta de un metodo.
	 * 
	 * @param idInspeccionJson
	 *            Integer
	 * @param idActuacionJson
	 *            Integer
	 * @param idPreguntaJson
	 *            Integer
	 * @param tipoDocumento
	 *            Integer
	 * @param oid
	 *            String
	 * @param ruta
	 *            String
	 * @param idDocumentoMovil
	 *            Integer
	 * @param usuario
	 *            String
	 * @param estado
	 *            Integer
	 * @param excepcion
	 *            Exception
	 * @return DocumentosJson
	 */
	public static DocumentosJson guardadoDocumentosJson(Integer idInspeccionJson, Integer idActuacionJson,
			Integer idPreguntaJson, Integer tipoDocumento, String oid, String ruta, String idDocumentoMovil,
			String usuario, Integer estado, Exception excepcion) {
		DocumentosJson documentoJson = new DocumentosJson();

		documentoJson.setInspeccionesJson(new InspeccionesJson(idInspeccionJson));
		documentoJson.setActuacionesJson(new ActuacionesJson(idActuacionJson));
		documentoJson.setPreguntasJson(new PreguntasJson(idPreguntaJson));
		documentoJson.setTipoDocumento(tipoDocumento);
		documentoJson.setOid(oid);
		documentoJson.setRuta(ruta);
		if (idDocumentoMovil != null) {
			documentoJson.setIdDocumentoMovil(idDocumentoMovil);
		}
		documentoJson.setEstado(estado);
		documentoJson.setUsuarioRegistro(usuario);
		if (excepcion != null) {
			documentoJson.setError(excepcion.getMessage());
		}

		return documentoJson;
	}
}
