package agilpizza.internal;

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;
	}
}
