import requests
from bs4 import BeautifulSoup
import time
import logging
import os

# Utilisation de Tor comme proxy
tor_proxy = {
    'http': 'socks5h://127.0.0.1:9050',
    'https': 'socks5h://127.0.0.1:9050'
}

session = requests.Session()
session.proxies.update(tor_proxy)
session.headers.update({
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
                  'AppleWebKit/537.36 (KHTML, like Gecko) '
                  'Chrome/120.0.0.0 Safari/537.36'
})

# Vérifie l'IP actuelle
try:
    ip = session.get("http://httpbin.org/ip", timeout=10).json()
    print("🔁 IP actuelle via Tor:", ip)
except Exception as e:
    print("❌ Impossible de vérifier l'IP via Tor :", e)

# Créer un dossier pour les logs si nécessaire
log_dir = '/root/liens'
os.makedirs(log_dir, exist_ok=True)
log_file = os.path.join(log_dir, 'scraper_log.txt')

# Fichier global pour tous les liens
fichier_global = os.path.join(log_dir, 'liens_jobup_complet.txt')

# Configurer le logging
logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s - %(levelname)s - %(message)s',
    handlers=[
        logging.StreamHandler(),
        logging.FileHandler(log_file, mode='w', encoding='utf-8')
    ]
)

def scraper_jobup(term, location):
    page = 1
    liens_uniques = set()

    while True:
        url = f"https://www.jobup.ch/fr/emplois/?term={term}&location={location}&page={page}"
        logging.info(f"[Page {page}] Chargement : {url}")

        try:
            response = session.get(url, timeout=10)
            response.raise_for_status()
        except requests.RequestException as e:
            logging.error(f"Erreur sur la page {page} : {e}")
            break

        soup = BeautifulSoup(response.text, 'html.parser')

        liens_page = {
            "https://www.jobup.ch" + a['href'].split("?")[0]
            for a in soup.find_all('a', href=True)
            if "/fr/emplois/detail" in a['href']
        }

        if not liens_page:
            logging.info("Fin des résultats.")
            break

        nouveaux_liens = liens_page - liens_uniques
        if not nouveaux_liens:
            break

        liens_uniques.update(nouveaux_liens)
        logging.info(f"→ {len(nouveaux_liens)} nouveaux liens trouvés.")
        page += 1
        time.sleep(1)

    return sorted(liens_uniques)

# Liste des recherches à effectuer
recherches = [
("assistant commercial", "vaud"),
("agent de maintenance", "vaud"),
("technicien support informatique", "vaud"),
("responsable qualité", "vaud"),
("contrôleur financier", "vaud"),
("gestionnaire immobilier", "vaud"),
("coordinateur événementiel", "vaud"),
("chargé de communication", "vaud"),


]

# Supprimer le fichier global s’il existe
if os.path.exists(fichier_global):
    os.remove(fichier_global)

# Lancer le scraper pour chaque combinaison
for term, location in recherches:
    identifiant = f"{term}_{location}".replace(" ", "_").lower()
    logging.info(f"\n--- Début du scraping pour {identifiant} ---\n")

    liens = scraper_jobup(term, location)

    with open(fichier_global, 'a', encoding='utf-8') as f:
        f.write(f"\n\n##### Résultats pour : {identifiant} #####\n")
        for lien in liens:
            f.write(lien + '\n')

    logging.info(f"✅ {len(liens)} liens ajoutés pour {identifiant}")
    time.sleep(6)

logging.info(f"\n📄 Tous les résultats sont regroupés dans : {fichier_global}")
