package com.thoughtworks.webanalyticsautomation.scriptrunner;

import org.apache.log4j.Logger; import org.openqa.selenium.By; import org.openqa.selenium.JavascriptExecutor; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement;

import java.util.Set;

/**

* Created by: Anand Bagmar
* Email: abagmar@gmail.com
* Date: Jan 4, 2011
* Time: 10:38:37 AM
*
* Copyright 2010 Anand Bagmar (abagmar@gmail.com).  Distributed under the Apache 2.0 License
*/

public class WebDriverScriptRunner implements ScriptRunner {

private WebDriver webDriverInstance;
private Logger logger = Logger.getLogger(getClass());

public WebDriverScriptRunner(WebDriver webDriverInstance) {
    this.webDriverInstance = webDriverInstance;
}

public String getHTMLSourceByExecutingScript(final String OMNITURE_DEBUGGER_URL, String OMNITURE_DEBUGGER_WINDOW_TITLE, String OMNITURE_DEBUGGER_URL_DECODE_CHECKBOX) {
    String htmlSource = null;
    String parentWindowHandle = webDriverInstance.getWindowHandle();
    logger.debug("parentWindowHandle = " + parentWindowHandle);
    logger.info ("Opening Omniture Debugger: " + OMNITURE_DEBUGGER_URL);
    ((JavascriptExecutor) webDriverInstance).executeScript(OMNITURE_DEBUGGER_URL);
    try{
        boolean windowFound = false;
        while(!windowFound){
            Set<String> windowHandles = webDriverInstance.getWindowHandles();
            for (String windowHandle: windowHandles){
                logger.debug("windowHandle = " + windowHandle);
                if (!windowHandle.equalsIgnoreCase(parentWindowHandle)) {
                    webDriverInstance = webDriverInstance.switchTo().window(windowHandle);
                    WebElement element = webDriverInstance.findElement(By.name(OMNITURE_DEBUGGER_URL_DECODE_CHECKBOX));
                    if (!element.isSelected()) {
                        logger.debug("checkbox not selected. clicking on it.");
                        element.click();
                        while (!element.isSelected()) {
                            logger.debug("checkbox status: " + element.isSelected());
                            Thread.sleep (3000);
                        }
                    }
                    Thread.sleep (3000);
                    htmlSource = webDriverInstance.getPageSource();
                    webDriverInstance.close();//child window closing
                    windowFound = true;
                    break;
                }
            }
        }
    }catch (Exception e){
        e.printStackTrace();
    }
    webDriverInstance.switchTo().window(parentWindowHandle);
    webDriverInstance.close();
    logger.debug("WebDriver omniture debugger page source: \n" + htmlSource);
    return htmlSource;
}

}