import os
from playwright.sync_api import sync_playwright
from urllib.request import urlretrieve

def main():
    # Cerem utilizatorului să introducă cuvintele cheie pentru căutare
    search_terms = input("Introduceți cuvintele cheie pentru căutare (ex. 'rețele neuronale'): ")

    # Inițializăm Playwright într-un context manager
    with sync_playwright() as pw:
        # Lansăm browser-ul Firefox cu interfață vizibilă și o întârziere de 2 secunde între acțiuni
        browser = pw.firefox.launch(headless=False, slow_mo=2000)
        
        # Creăm o pagină nouă în browser
        page = browser.new_page()
        
        # Navigăm la pagina de căutare arXiv
        page.goto("http://arxiv.org/search")
        
        # Găsim câmpul de căutare după placeholder-ul "Search term"
        search_input = page.get_by_placeholder("Search term")
        
        # Completăm câmpul cu termenii introduși de utilizator
        search_input.fill(search_terms)
        
        # Găsim al doilea buton "Search" și apăsăm pe el
        search_button = page.get_by_role("button").get_by_text("Search").nth(1)
        search_button.click()
        
        # Așteptăm să se încarce pagina cu rezultate
        page.wait_for_load_state("networkidle")
        
        # Găsim toate link-urile către PDF-uri
        links = page.locator("xpath=//a[contains(@href, 'arxiv.org/pdf')]").all()
        
        # Creăm directorul "data" dacă nu există
        if not os.path.exists("data"):
            os.mkdir("data")
        
        # Descărcăm fiecare PDF
        for link in links:
            url = link.get_attribute("href")
            if url:
                # Creăm un nume de fișier bazat pe ultimele 5 caractere din URL
                file_name = f"data/{url[-5:]}.pdf"
                # Descărcăm fișierul
                urlretrieve(url, file_name)
                print(f"Descărcat: {file_name}")
        
        # Închidem browser-ul
        browser.close()

if __name__ == "__main__":
    main()
