# Each time you run the test script reset the database.
# For this test script you won't need it since it changes
# the Ta's email and name automatically
import re
import time
import pytest
from faker import Faker
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

faker = Faker()
@pytest.mark.skip(reason="function to be used in the test_scripts")
def createTA(driver, TA_name, emails, password):
    full_name = driver.find_element('name', 'fullname')
    full_name.send_keys(TA_name)
    email = driver.find_element('name', 'email')
    email.send_keys(emails)
    pas = driver.find_element('name', 'password')
    pas.send_keys(password)
    usr_type = driver.find_element('name', 'type')
    usr_type.click()
    click_create = driver.find_element('name', 'create_btn')
    click_create.click()

def login_lecturer(drivers):
    # Open the website
    drivers.get("http://localhost/lrr/")
    drivers.maximize_window()

    username_input = drivers.find_element('name', "user")

    password_input = drivers.find_element('name', "password")

    login_button = drivers.find_element('id', "login_btn")

    # login as a Lecturer
    username_input.send_keys("lanhui@qq.com")
    password_input.send_keys("nil1234H@")
    # Click the login button
    time.sleep(5)
    login_button.click()
    admin_tab = drivers.find_element('id', 'admin_tab')
    admin_tab.click()

    cte_instructor = drivers.find_element('id', 'tab_ins_accounts')
    cte_instructor.click()
    time.sleep(25)

def test_createTA():
    driver_open = webdriver.Chrome()
    driver_open.maximize_window()
    login_lecturer(driver_open)
    try:
        fullname = faker.name()
        email = faker.email()
        password = "new1452345678"
        createTA(driver_open, fullname, email,password)  # CREATE A TA  WITH FULLNAME lanhuitest email lanhuitest@test.com  password lanhui12345678

        get_output = WebDriverWait(driver_open, 10).until(
            EC.element_to_be_clickable((By.ID, "tab_ins_accounts"))
        )
        get_output.click()
        get_output_msg = driver_open.find_element(By.CLASS_NAME, "alert-warning")
        txt_alert = get_output_msg.text
        time.sleep(20)

        if txt_alert.find("TA user created successfully") == 0:
            logout_button = WebDriverWait(driver_open, 15).until(
                EC.element_to_be_clickable(
                    (By.XPATH, "//a[contains(@class, 'nav-link') and contains(@href, 'logout.php')]"))
            )
            time.sleep(5)
            logout_button.click()
            time.sleep(10)
            username_input = driver_open.find_element('name', "user")
            password_input = driver_open.find_element('name', "password")
            login_button = driver_open.find_element('id', "login_btn")
            # login as the new TA
            username_input.send_keys(email)  # login with credentials of the created TA
            password_input.send_keys(password)
            # Click the login button
            time.sleep(20)

            login_button.click()

            time.sleep(20)
        elif txt_alert.find("Email address ") == 0:

            time.sleep(22)
            driver_open.quit()

        else:
            driver_open.quit()

        time.sleep(5)

    finally:
        driver_open.quit()


def test_generate_password():
    driver_open = webdriver.Chrome()
    login_lecturer(driver_open)
    try:
        fullname = faker.name()
        email = faker.email()
        password = ""
        createTA(driver_open, fullname, email,
                 password)  # CREATE A TA  WITH FULLNAME lanhuitest email lanhuitest@test.com  password lanhui12345678

        get_output = WebDriverWait(driver_open, 5).until(
            EC.element_to_be_clickable((By.ID, "tab_ins_accounts"))
        )
        get_output.click()
        get_output_msg = driver_open.find_element(By.CLASS_NAME, "alert-warning")
        txt_alert = get_output_msg.text
        time.sleep(20)

        if txt_alert.find("TA user created successfully") == 0:
            time.sleep(20)
            email_pattern = r"Use email (\S+) as account name"
            password_pattern = r" (\S+)\ as password."
            email_match = re.search(email_pattern, txt_alert)
            password_match = re.search(password_pattern, txt_alert)
            if email_match and password_match:
                # Extract email and password from the matches
                email = email_match.group(1)
                password = password_match.group(1)
            logout_button = WebDriverWait(driver_open, 10).until(
                EC.element_to_be_clickable(
                    (By.XPATH, "//a[contains(@class, 'nav-link') and contains(@href, 'logout.php')]"))
            )
            logout_button.click()
            time.sleep(15)
            username_input = driver_open.find_element('name', "user")
            password_input = driver_open.find_element('name', "password")
            login_button = driver_open.find_element('id', "login_btn")
            # login as the new TA
            username_input.send_keys(email)  # login with credentials of the created TA
            password_input.send_keys(password)
            # Click the login button
            time.sleep(20)

            login_button.click()

            time.sleep(20)

        elif txt_alert.find("Email address ") == 0:
            time.sleep(22)
            driver_open.quit()

        else:
            driver_open.quit()

        time.sleep(5)

    finally:
        driver_open.quit()

def test_existingTA():
    driver_open = webdriver.Chrome()
    login_lecturer(driver_open)
    try:
# Use email nreyes@example.com as account name and new1452345678 as password.
        fullname = "Maria"
        email = "nreyes@example.com"
        password = "new1452345678"
        createTA(driver_open, fullname, email,
                 password)  # CREATE A TA  WITH FULLNAME lanhuitest email lanhuitest@test.com  password lanhui12345678

        get_output = WebDriverWait(driver_open, 5).until(
            EC.element_to_be_clickable((By.ID, "tab_ins_accounts"))
        )
        get_output.click()
        get_output_msg = driver_open.find_element(By.CLASS_NAME, "alert-warning")
        txt_alert = get_output_msg.text
        time.sleep(20)

        if txt_alert.find("TA user created successfully") == 0:
            time.sleep(20)


        elif txt_alert.find("Email address ") == 0:
            time.sleep(22)
            driver_open.quit()

        else:
            driver_open.quit()
        time.sleep(5)

    finally:
        driver_open.quit()