# Moodle Scraper
# 2023 - Matteo Mariotti

from selenium import webdriver
from selenium.webdriver.common.by import By
from dotenv import load_dotenv
import time
import os

load_dotenv()


matricola = os.getenv('UTENTE')
password = os.getenv('PASSWORD')


url_risultati_esame = "https://elearning.uniroma1.it/mod/quiz/review.php?attempt=1096697&cmid=408285"
codice_esame = "0721"


# Main Function
if __name__ == '__main__':
  
    options = webdriver.ChromeOptions()
    options.add_argument("--start-maximized")
    options.add_argument('--log-level=3')
  
    # Provide the path of chromedriver present on your system.
    driver = webdriver.Chrome(executable_path="./chromedriver.exe",
                              chrome_options=options)
    driver.set_window_size(1920,1080)
  
    # Loggo in elearning
    driver.get('https://elearning.uniroma1.it/auth/mtsaml/')
    time.sleep(1)
    userbox = driver.find_element(By.ID, "username")
    passbox = driver.find_element(By.ID, "password")
    userbox.send_keys(matricola)
    passbox.send_keys(password)
    button = driver.find_element(By.NAME, "_eventId_proceed")
    button.click()
    time.sleep(1)

    #Apro i risultati del test
    driver.get(url_risultati_esame)

    # Ottengo tutti i box delle domande
    qboxes = driver.find_elements(By.CLASS_NAME, "qtext")

    #Prendo tutti i box delle risposte e li divido (n.b. controllare nei risultati che la divisione sia corretta)
    answers = driver.find_elements(By.CLASS_NAME, "answer")
    answers_cleaned = []
    for i, answer in enumerate(answers):
        with open("risposte.txt", "w") as f1:
            f1.write(answer.text)
        answers_cleaned.append([])
        answers_cleaned[i].append(answer.text.split("1.",1)[1].split("2.",1)[0])
        answers_cleaned[i].append(answer.text.split("1.",1)[1].split("2.",1)[1].split("3.",1)[0])
        answers_cleaned[i].append(answer.text.split("1.",1)[1].split("2.",1)[1].split("3.",1)[1])

    # Ottenfo tutti i box delle risposte corrette e elimino la prima parte che non รจ necessaria
    rightAnswers = driver.find_elements(By.CLASS_NAME, "rightanswer")
    right = []
    for ranswer in rightAnswers:
        right.append(ranswer.text[24:])


    #Procedo alla creazione dei file
    i = 0    
    for domanda, risposte, corretta in zip(qboxes, answers_cleaned, right):
        cartella = codice_esame + "_" + str(i)
        os.mkdir(cartella)
        with open(cartella + "/quest.txt", "w") as f:
            f.write(domanda.text.strip())
        j=1
        for risp in risposte:
            #Se la risposta coincide con quella corretta la metto in correct.txt altrimenti va in un file wrong{indice}.txt
            #N.B. Il controlla a volte non funziona correttamente (vengono generati solo file wrong.txt)
            if (risp.strip() == corretta.strip()):
                with open(cartella + "/correct.txt", "w") as f:
                    f.write(risp.strip())
            else:
                with open(cartella + "/wrong"+str(j)+".txt", "w") as f:
                    f.write(risp.strip())
                j = j+1
        i = i+1

    time.sleep(60)
    driver.quit()
    print("Done")