package main.java.com.baeldung.selenium;

import main.java.com.baeldung.selenium.config.SeleniumConfig;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.interactions.Actions;

import java.util.List;
import java.util.concurrent.TimeUnit;

public class SeleniumExample {

    private SeleniumConfig config;
    private String url = "http://www.baeldung.com/";

    public SeleniumExample() {
        config = new SeleniumConfig();
        config.getDriver().get(url);
    }

    public void closeWindow() {
        this.config.getDriver().close();
    }

    public String getTitle() {
        return this.config.getDriver().getTitle();
    }

    public void getAboutBaeldungPage() {
        closeOverlay();
        clickAboutLink();
        clickAboutUsLink();
    }

    private void closeOverlay() {
        List<WebElement> webElementList = this.config.getDriver().findElements(By.tagName("a"));
        if (webElementList != null) {
            webElementList.stream()
              .filter(webElement -> "Close".equalsIgnoreCase(webElement.getAttribute("title")))
              .filter(WebElement::isDisplayed)
              .findAny()
              .ifPresent(WebElement::click);
        }
    }

    private void clickAboutLink() {
        this.config.getDriver().findElement(By.partialLinkText("About")).click();
    }

    private void clickAboutUsLink() {
        Actions builder = new Actions(config.getDriver());
        WebElement element = this.config.getDriver().findElement(By.partialLinkText("About Baeldung."));
        builder.moveToElement(element).build().perform();
    }

    public boolean isAuthorInformationAvailable() {
        return this.config.getDriver()
                .findElement(By.cssSelector("article > .row > div"))
                .isDisplayed();
    }
}