from selenium import webdriver
import pytest
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# https://github.com/SeleniumHQ/seleniumhq.github.io/blob/trunk/examples/python/README.md

# BROWSER = 'chrome'
# BROWSER = "firefox"
BROWSER = "edge"

HOST_URL = "http://vipslogic-local.no"
#HOST_URL = "https://logic.testvips.nibio.no"
#HOST_URL = "https://logic.vips.nibio.no"


@pytest.fixture
def browser():
    if BROWSER == "chrome":
        chrome_options = webdriver.ChromeOptions()
        chrome_options.add_argument("--headless")
        driver = webdriver.Chrome(options=chrome_options)
    elif BROWSER == "firefox":
        firefox_options = webdriver.FirefoxOptions()
        firefox_options.headless = False
        driver = webdriver.Firefox(options=firefox_options)
    elif BROWSER == "edge":
        edge_options = webdriver.EdgeOptions()
        edge_options.headless = False
        driver = webdriver.Edge(options=edge_options)
    else:
        raise Exception("Browser must be set to chrome, firefox or edge")

    #driver.get("http://vipslogic/index.html")
    driver.get(f"{HOST_URL}/index.html")

    assert driver.title == "Please log in"
    driver.implicitly_wait(0.5)
    driver.find_element(by=By.NAME, value="username").send_keys("seleniumtest")
    driver.find_element(by=By.NAME, value="password").send_keys("seleniumTEST")
    driver.find_element(by=By.CSS_SELECTOR, value="button").click()
    assert driver.title == "Welcome to VIPSLogic"
    yield driver
    driver.quit()


def test_name_of_logged_in_user(browser):
    link = browser.find_element(By.XPATH, '//a[text()="Selenium Testbruker"]')
    assert link is not None


def test_admin_organisms(browser):
    browser.find_element(By.XPATH, '//a[text()="Admin"]').click()
    link = WebDriverWait(browser, 15).until(
        EC.element_to_be_clickable((By.XPATH, '//a[text()="Organisms"]'))
    )
    assert link.get_attribute("href") == f"{HOST_URL}/organism"
    link.click()
    assert browser.title == "Organisms"
    link = WebDriverWait(browser, 15).until(
        EC.element_to_be_clickable((By.XPATH, '//a[text()="List all pests"]'))
    )
    link.click()
    assert browser.title == "All pests"


def test_admin_scheduling(browser):
    browser.find_element(By.XPATH, '//a[text()="Admin"]').click()
    link = WebDriverWait(browser, 10).until(
        EC.element_to_be_clickable((By.XPATH, '//a[text()="Scheduling"]'))
    )
    assert link.get_attribute("href") == f"{HOST_URL}/scheduling"
    link.click()
    assert browser.title == "Scheduling overview"


def test_admin_organization_group(browser):
    browser.find_element(By.XPATH, '//a[text()="Admin"]').click()
    link = WebDriverWait(browser, 10).until(
        EC.element_to_be_clickable((By.XPATH, '//a[text()="Organization groups"]'))
    )
    assert link.get_attribute("href") == f"{HOST_URL}/organizationgroup"
    link.click()
    assert browser.title == "Organization groups"


def test_admin_apple_fruit_moth(browser):
    browser.find_element(By.XPATH, '//a[text()="Admin"]').click()
    link = WebDriverWait(browser, 10).until(
        EC.element_to_be_clickable((By.XPATH, '//a[text()="Apple fruit moth"]'))
    )
    assert link.get_attribute("href") == f"{HOST_URL}/applefruitmoth"
    link.click()
    assert browser.title == "Rognebærmøllstasjoner"


def test_admin_users(browser):
    browser.find_element(By.XPATH, '//a[text()="Admin"]').click()
    link = WebDriverWait(browser, 20).until(
        EC.element_to_be_clickable((By.XPATH, '//a[text()="Users"]'))
    )
    assert link.get_attribute("href") == f"{HOST_URL}/user"
    link.click()
    WebDriverWait(browser, 20).until(
        EC.visibility_of_element_located((By.XPATH, "//h1[text()='Users']"))
    )
    assert browser.title == "Users"


def test_admin_forecasts(browser):
    browser.find_element(By.XPATH, '//a[text()="Admin"]').click()
    link = WebDriverWait(browser, 20).until(
        EC.element_to_be_clickable((By.XPATH, '//a[text()="Forecasts"]'))
    )
    assert link.get_attribute("href") == f"{HOST_URL}/forecastConfiguration"
    link.click()
    WebDriverWait(browser, 20).until(
        EC.visibility_of_element_located((By.XPATH, "//h1[text()='Forecasts']"))
    )
    assert browser.title == "Forecasts"