#!/usr/bin/env python3

"""seed_scihub_max_seeders.py

Description:
Find Sci Hub torrents containing MAX_SEEDERS seeders and add them to a qBittorrent
instance.

MAX_SEEDERS is a positive integer argument.

Usage:
    seed_scihub_max_seeders.py [--only-count] (HOSTNAME) (USERNAME) (PASSWORD) (MAX_SEEDERS)
    seed_scihub_max_seeders.py -h

Examples:
    seed_scihub_max_seeders.py "http://localhost:8080" "admin" "adminadmin" 4
    seed_scihub_max_seeders.py --only-count "https://cat.seedhost.eu/lol/qbittorrent" "lol" "pw" 3

Options:
    --only-count    do not add torrents, but only print the number of torrents with MAX_SEEDERS
    -h, --help      show this help message and exit
"""

import json
import os

import requests
from docopt import docopt
from qbittorrent import Client


if __name__ == "__main__":
    args = docopt(__doc__)  # type: ignore
    qb = Client(args["HOSTNAME"])
    qb.login(username=args["USERNAME"], password=args["PASSWORD"])

    TORRENT_HEALTH_URL = (
        "https://zrthstr.github.io/libgen_torrent_cardiography/torrent.json"
    )
    response = requests.get(TORRENT_HEALTH_URL, timeout=60)
    json_data = json.loads(response.text)

    if args["--only-count"]:
        sum = 0
        for item in json_data:
            if item["seeders"] <= int(args["MAX_SEEDERS"]):
                sum += 1
        print(f"Number of torrents with <= {int(args["MAX_SEEDERS"])} seeders: {sum}")
    else:
        for item in json_data:
            if item["seeders"] <= int(args["MAX_SEEDERS"]):
                qb.download_from_link(item["link"], category="scihub")
                print(f"Added {os.path.basename(item["name"])}")