from helper import login, logout
import time
import pytest
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC


def test_admin_can_create_lecturer_account(driver, url, admin_username, admin_password, restore_database):
    # Administrator (admin@qq.com, password 123) logs in
    driver.maximize_window()
    login(driver, url, admin_username, admin_password)

    # Create a Lecturer account for Mr Lan (mrlan@qq.com, password [123Abc!])
    tab = driver.find_element(By.ID, 'tab_ins_accounts')
    tab.click()
    elem = driver.find_element(By.NAME, 'fullname')
    elem.send_keys('Mr Lan')
    elem = driver.find_element(By.NAME, 'email')
    elem.send_keys('mrlan@qq.com')
    elem = driver.find_element(By.NAME, 'password')
    elem.send_keys('123Abc!!')
    radio_button = driver.find_element(By.NAME, 'type')
    radio_button.click()
    button = driver.find_element(By.NAME, 'create_btn')
    button.click()

    # Log out Admin account
    logout(driver)

    # Log in Lecturer account
    login(driver, url, 'mrlan@qq.com', '123Abc!!')
    elems = driver.find_elements(By.CLASS_NAME, 'nav-link')
    assert '(Lecturer)' in elems[0].text
    assert 'Mr Lan' in elems[0].text
    driver.quit()


def test_lecturer_can_create_course(driver, url, restore_database):
    # Lecturer lanhui@qq.com logs in
    driver.maximize_window()
    login(driver, url, 'lanhui@qq.com', '123')

    # Create a course called CSC1001 Advanced Software Engineering, 2024
    elem = driver.find_element(By.NAME, 'name')
    elem.send_keys('Advanced Software Engineering')
    elem = driver.find_element(By.NAME, 'code')
    elem.send_keys('CSC1001')
    elem = driver.find_element(By.NAME, 'academic')
    elem.send_keys('2004')
    elem = driver.find_element(By.NAME, 'faculty')
    elem.send_keys('School of Computer Science and Technology')
    elem = driver.find_element(By.CLASS_NAME, 'btn-primary')
    elem.click()
    elems = driver.find_elements(By.CLASS_NAME, 'btn-default')
    last_elem = elems[-1]
    assert 'Advanced Software Engineering' in last_elem.text
    assert '(CSC1001)' in last_elem.text

    # Logout
    logout(driver)
    driver.quit()


def test_lecturer_can_post_assignment(driver, url, restore_database):
    # Lecturer lanhui@qq.com logs in
    driver.maximize_window()
    login(driver, url, 'lanhui@qq.com', '123')

    # Create an assignment called Take-home quiz 1 for course (P.M2019) - Project Management
    elems = driver.find_elements(By.CLASS_NAME, 'btn-default')
    elems[1].click()
    elem = driver.find_element(By.NAME, 'deadlinedate')
    elem.send_keys('002024/12/30')
    elem = driver.find_element(By.NAME, 'deadlinetime')
    elem.send_keys('23:59')
    elem = driver.find_element(By.NAME, 'title')
    elem.send_keys('Take-home quiz 1')
    elem = driver.find_element(By.NAME, 'instructions')
    elem.send_keys('This is a closed-book quiz.')
    elem = driver.find_element(By.NAME, 'marks')
    elem.send_keys('10')
    radio_button = driver.find_element(By.NAME, 'type')
    radio_button.click()
    elem = driver.find_element(By.CLASS_NAME, 'btn-primary')
    elem.click()

    # Check if the assignment has been successfully posted
    elem = driver.find_element(By.CLASS_NAME, 'card-title')
    assert 'Take-home quiz 1 (10 Marks, Individual)' in elem.text
    elem = driver.find_element(By.CLASS_NAME, 'text-muted')
    assert 'Deadline: 2024-12-30' in elem.text


def test_lecturer_can_add_student_numbers(driver, url, restore_database):
    # Lecturer lanhui@qq.com logs in
    driver.maximize_window()
    login(driver, url, 'lanhui@qq.com', '123')

    # Add ASE student numbers
    student_numbers = '''
    202420781739
    202420781740
    202420781741
    202420781742
    202420781743
    202420781745
    202420581366
    202420581368
    202420581369
    202420581370
    202420581372
    202420581373
    202420581374
    202420581376
    202420581378
    202420581381
    '''
    elem = driver.find_element(By.ID, 'admin_tab')
    elem.click()
    elem = driver.find_element(By.NAME, 'users')
    elem.send_keys(student_numbers)
    elem = driver.find_element(By.ID, 'register_btn')
    elem.click()

    elems = driver.find_elements(By.CSS_SELECTOR, 'p')
    added = 0
    student_lst = [number.strip() for number in student_numbers.strip().split('\n')]
    print(student_lst)
    for student_no in student_lst:
        for elem in elems:
            if student_no in elem.text and 'added' in elem.text:
                added += 1
                break
    assert added == len(student_lst)


@pytest.mark.skip()
def test_student_can_sign_up():
    # Student with recognizable student number can sign up an account
    assert True


@pytest.mark.skip()
def test_student_can_join_course():
    # Student can join CSC1001 Advanced Software Engineering
    assert True


@pytest.mark.skip()
def test_student_can_submit_assignment():
    # Student can submit Take-home quiz 1 for CSC1001
    assert True