package org.jboss.windup.testutil.html;

import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;

import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
 * Tests the contents of the compatible files report
 */
public class TestCompatibleReportUtil extends TestReportUtil
{

    /**
     * Checks that a sis listed with the given name and technology
     */
    public boolean checkFileInReport(String name, String technology)
    {
        List<WebElement> elements = getDriver().findElements(By.tagName("table"));
        if (elements == null || elements.isEmpty())
        {
            throw new CheckFailedException("Unable to find any static Compatible table element");
        }
        boolean result = false;
        for (WebElement el : elements)
        {
            result |= checkValueInTable(el, name, technology);
        }
        return result;
    }

    /**
     * Checks that a sis listed with the given name and technology
     */
    public boolean checkTableWithoutDuplicates()
    {

        List<WebElement> elements = getDriver().findElements(By.tagName("table"));
        if (elements == null || elements.isEmpty())
        {
            throw new CheckFailedException("Unable to find any static Compatible table element");
        }
        for (WebElement element : elements)
        {
            //for a single table
            Set<String> foundClasses = new HashSet<>();
            List<WebElement> rowElements = element.findElements(By.xpath(".//tr"));
            for (WebElement rowElement : rowElements)
            {
                List<WebElement> tdElements = rowElement.findElements(By.xpath(".//td[position() = " + (1) + "]"));
                if (tdElements.size() != 1)
                {
                    break;
                }
                String firstElementString = tdElements.get(0).getText().trim();
                String withoutExtension = firstElementString.replaceAll("\\.class", "");
                withoutExtension = withoutExtension.replaceAll("\\.java", "");
                if (foundClasses.contains(withoutExtension))
                {
                    return false;
                }
                else
                {
                    foundClasses.add(withoutExtension);
                }

            }
        }
        return true;
    }
}
