#!/usr/bin/env python

import sys
import subprocess
import time
import random


def ensure_package(pkg):
    try:
        __import__(pkg)
    except ImportError:
        subprocess.check_call([sys.executable, "-m", "pip", "install", pkg])


ensure_package("requests")

import requests
import argparse


def create_session():
    s = requests.Session()
    s.headers.update({
        "User-Agent": "Mozilla/5.0"
    })
    return s


def recherche_searx(session, base_url, query, n):
    url = f"{base_url}/search"
    params = {
        "q": query,
        "format": "json"
    }

    try:
        r = session.get(url, params=params, timeout=5)
        if r.status_code != 200:
            return []

        data = r.json()
        results = []

        for item in data.get("results", [])[:n]:
            title = item.get("title")
            link = item.get("url")
            if title and link:
                results.append((title, link))

        time.sleep(random.uniform(1, 2))
        return results

    except Exception:
        return []


def main(argc, argv):
    parser = argparse.ArgumentParser()
    parser.add_argument("query", type=str)
    parser.add_argument("-n", "--number", type=int, default=5)
    parser.add_argument("--engine", type=str, default="https://searx.be")

    args = parser.parse_args(argv[1:])

    session = create_session()
    results = recherche_searx(session, args.engine, args.query, args.number)

    if not results:
        print("Aucun résultat (instance HS ou bloquée)")
        return

    for i, (title, link) in enumerate(results, 1):
        print(f"{i}. {title}")
        print(link)


if __name__ == "__main__":
    main(len(sys.argv), sys.argv)
