package com.ejie.ab39a.exceptions;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import com.gfi.constants.Constants;

/**
 * Mensaje
 * 
 *  
 */
public class Mensaje implements Serializable {

	private static final long serialVersionUID = 1L;

	/**
	 * key
	 */
	private String key = null;

	/**
	 * isTraducido
	 */
	private boolean traducido = false;

	/**
	 * parametrosKey
	 */
	private List<ParametroKey> parametrosKey = null;

	/**
	 * Constructor para formar mensajes sin parametros y que debe recuperar el
	 * literal de BD
	 * 
	 * @param key
	 *            String key
	 */
	public Mensaje(String key) {
		this.key = key;
		this.parametrosKey = null;
	}

	/**
	 * Constructor para formar mensajes con un parametro el cual se indica si se
	 * debe recueprar el parametro de BD
	 * 
	 * @param key
	 *            String key
	 * @param param
	 *            String param
	 * @param isKey
	 *            boolean isKey
	 */
	public Mensaje(String key, String param, boolean isKey) {
		this.key = key;
		this.parametrosKey = new ArrayList<ParametroKey>();
		ParametroKey parametroKey = new ParametroKey(param, isKey);
		this.parametrosKey.add(parametroKey);
	}

	/**
	 * Constructor para formar mensajes con un parametro el cual se debe
	 * recuperar de BD
	 * 
	 * @param key
	 *            String key
	 * @param param
	 *            String param
	 */
	public Mensaje(String key, String param) {
		this.key = key;
		this.parametrosKey = new ArrayList<ParametroKey>();
		ParametroKey parametroKey = new ParametroKey(param, true);
		this.parametrosKey.add(parametroKey);
	}

	/**
	 * Constructor para formar mensajes con dos parametros los cuales se deben
	 * recuperar de BD
	 * 
	 * @param key
	 *            String key
	 * @param param1
	 *            String param1
	 * @param param2
	 *            String param2
	 * @param isKey
	 *            boolean isKey
	 */
	public Mensaje(String key, String param1, String param2, boolean isKey) {
		this.key = key;
		this.parametrosKey = new ArrayList<ParametroKey>();
		ParametroKey parametroKey1 = new ParametroKey(param1, isKey);
		ParametroKey parametroKey2 = new ParametroKey(param2, isKey);
		this.parametrosKey.add(parametroKey1);
		this.parametrosKey.add(parametroKey2);
	}

	/**
	 * Method 'getKey'.
	 * 
	 * @return String
	 */
	public String getKey() {
		return this.key;
	}

	/**
	 * Method 'setKey'.
	 * 
	 * @param key
	 *            String
	 */
	public void setKey(String key) {
		this.key = key;
	}

	/**
	 * Method 'getParametrosKey'.
	 * 
	 * @return List<ParametroKey>
	 */
	public List<ParametroKey> getParametrosKey() {
		return this.parametrosKey;
	}

	/**
	 * Method 'setParametrosKey'.
	 * 
	 * @param parametrosKey
	 *            List<ParametroKey>
	 */
	public void setParametrosKey(List<ParametroKey> parametrosKey) {
		this.parametrosKey = parametrosKey;
	}

	/**
	 * Method 'isTraducido'
	 * 
	 * @return boolean
	 */
	public boolean isTraducido() {
		return this.traducido;
	}

	/**
	 * Method 'setTraducido'
	 * 
	 * @param traducido
	 *            boolean
	 */
	public void setTraducido(boolean traducido) {
		this.traducido = traducido;
	}

	/**
	 * Comprueba si el mensaje tiene parametros
	 * 
	 * @return boolean
	 */
	public boolean isParametrosKeyList() {
		return (this.parametrosKey != null && !this.parametrosKey.isEmpty());
	}

	/**
	 * Retorna los parametros seguidos por comas
	 * 
	 * @return String
	 */
	public String getParametrosKeyStr() {
		StringBuilder stb = new StringBuilder(Constants.STRING_BUILDER_INIT);
		if (this.getParametrosKey() != null && !this.getParametrosKey().isEmpty()) {
			Iterator<ParametroKey> itParametrosKey = this.getParametrosKey().iterator();
			boolean isPrimeraVez = true;
			while (itParametrosKey.hasNext()) {
				if (!isPrimeraVez) {
					stb.append(",");
				}
				stb.append(itParametrosKey.next().getValorParametro());
				isPrimeraVez = false;
			}
		}
		return stb.toString();
	}

	/**
	 * 
	 * @return Object[]
	 */
	public Object[] getParametrosKeyObject() {
		Object[] objs = null;
		if (this.getParametrosKey() != null && !this.getParametrosKey().isEmpty()) {
			objs = new Object[this.getParametrosKey().size()];
			Iterator<ParametroKey> itParametrosKey = this.getParametrosKey().iterator();
			int i = 0;
			while (itParametrosKey.hasNext()) {
				objs[i] = itParametrosKey.next().getValorParametro();
				i++;
			}
		}
		return objs;
	}
}