package agilpizza.selenium;

import com.thoughtworks.selenium.DefaultSelenium;

public class SmartSelenium extends DefaultSelenium {
	public static final String TIMEOUT = "30000";
	
	/**
	 * @param serverHost Host
	 * @param serverPort Porta
	 * @param browserStartCommand Comando para abrir o browser
	 * @param browserURL URL que deve ser testada
	 */
	public SmartSelenium(String serverHost, int serverPort,
			String browserStartCommand, String browserURL) {
		super(serverHost, serverPort, browserStartCommand, browserURL);
	}

	/**
	 * Clica e espera
	 * @param locator Locator do elemento
	 */
	public void clickAndWait(String locator) {
		click(locator);
		waitForPageToLoad(TIMEOUT);
	}
	
	/**
	 * Comando select para combos dinamicas
	 * @param locator Locator do elemento
	 * @param option Opcao que deve ser selecionada
	 */
	public void selectAndWait(String locator, String option) {
		select(locator, option);
		waitForPageToLoad(TIMEOUT);
	}

	/**
	 * Pausa a execucao dos testes. Bom para debug.
	 * @param time Tempo de pausa
	 */
	public void pause(int time) {
		try {
			Thread.sleep(time);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * Espera por um titulo durante no maximo TIMEOUT segundos.
	 * @param title Titulo da pagina
	 * @param time Tempo de espera entre as verificacoes
	 * @throws Exception Excecao
	 */
	public void waitForTitle(String title, int time) throws Exception {
		int aux = 0, timeout = Integer.parseInt(TIMEOUT);
		while(!getTitle().equals(title)) {
			aux += time;
			if(aux > timeout) throw new Exception("TIMEOUT - waitForTitle");
			pause(time);
		}
	}
	
	/**
	 * Primeira coluna tem indice 0.
	 * @param table Nome da tabela
	 * @param column Indice da coluna onde deve se encontrar o texto
	 * @param text Texto
	 * @return true se encontrou, false se deu erro ou nao encontrou
	 */
	public boolean isTextPresentInColumnTable(String table, int column, String text) {
		int i = 0;
		try {
			while(true) {
				String coluna = getTable(table + "." + i + "." + column);
				//System.out.println(coluna);
				if(coluna.contains(text)) return true;
				i++;
			}
		} catch (RuntimeException e) {
			//System.out.println(i + " " + e.getMessage());
		} // Chegou no fim da tabela
		return false;
	}
	
}
