package windows;

import java.util.*;		// ArrayList

/**
 * Clase que representa una palabra.
 * Esta palabra 'Word' sera compuesta por la palabra en distintos idiomas
*/
public class Word {
	private String category;
	private ArrayList<Language> word;
	
	/**
	* Constructor publico.
	* 
	* Inicializa el objeto.
	* 
	*/
	public Word(){
		word = new ArrayList<Language>();
	}
	/**
	* Constructor publico.
	* 
	* Inicializa el objeto y se tendra la palabra en un solo idioma.
	* @param s 		nombre de la categoria a la cual pertenece la palabra
	* @param w 		palabra en un lenguaje.
	*/
	public Word(String s, Language w){
		category = s;
		word = new ArrayList<Language>();
		word.add(w);
	}
	/**
	* Constructor publico.
	* 
	* Inicializa el objeto y almacena la palabra en dos idiomas.
	* @param s 		nombre de la categoria a la cual pertenece la palabra
	* @param w0 	palabra en un lenguaje 'x'.
	* @param w1 	palabra en un lenguaje 'y'.
	*/
	public Word(String s, Language w0, Language w1){
		category = s;
		word = new ArrayList<Language>();
		word.add(w0);
		word.add(w1);
	}
	/**
	* Constructor publico.
	* 
	* Inicializa el objeto y almacena la palabra en cuatro idiomas.
	* @param s 		nombre de la categoria a la cual pertenece la palabra
	* @param w0 	palabra en un lenguaje 'x'.
	* @param w1 	palabra en un lenguaje 'y'.
	* @param w2 	palabra en un lenguaje 'z'.
	* @param w3 	palabra en un lenguaje 'w'.
	*/
	public Word(String s, Language w0, Language w1, Language w2, Language w3){
		category = s;
		word = new ArrayList<Language>();
		word.add(w0);
		word.add(w1);
		word.add(w2);
		word.add(w3);
	}
	/**
	* Agrega la palabra en un nuevo lenguaje
	* @param w 		palabra en lenguaje nuevo
	*/
	public void addLangWord(Language w){
		word.add(w);
	}
	/**
	* Retorna la palabra en todos los idiomas que este almacenada
	* @return word 		lista de palabra en distintos idiomas
	*/
	public ArrayList<Language> getLanguages(){
		return word;
	}
	/**
	* Retorna la categoria de la palabra
	* @return category 		categoria de la palabra
	*/
	public String getCategory(){
		return category;
	}
	/**
	* Retorna la palabra en el idioma nativo
	* @param i 		id del idioma nativo
	* @return String con la palabra en el idioma nativo
	*/
	public String getSourceWord(int i){		// returns word in main language, it should be the first one in the array
		return word.get(i).getWord();
	}
	/**
	* Retorna la palabra en el idioma que se desea aprender
	* @param i 		id del idioma a aprender
	* @return String con la palabra en el idioma a aprender
	*/
	public String getLearningWord(int i){	// returns word in learning language
		return word.get(i).getWord();
	}
	/** Retorna una nueva palabra solo en el idioma nativo y el que se desea aprender 
	* @param source 	palabra en idioma nativo
	* @param learn 		palabra en idioma que se desea aprender
	* @return nueva palabra en el idioma nativo y el que se desea aprender 
	*/
	public Word getNewWord(String source, String learn){		// returns new word in two languages
		int a, b;
		a = b = 0;
		int i = 0;
		for(Language l:word){
			String l_class = l.getLanguage();
			if(l_class.compareTo(source) == 0)		// If they are the same, compareTo returns '0'
				a = i;
			if(l_class.compareTo(learn) == 0)		// If they are the same, compareTo returns '0'
				b = i;
			i++;
		}
		return new Word(category, word.get(a), word.get(b));
	}
}
