#!/usr/bin/env python3
"""seed_armbian_torrents

Description:
Armbian torrents seed script

This script will download Armbian torrent files and add them to a qBittorrent
instance. It's intended to be run under /etc/cron.weekly or used in a systemd
timer.

This is a Python implementation of https://docs.armbian.com/Community_Torrent/
for qBittorrent.

Usage:
    seed_armbian_torrents (HOSTNAME) (USERNAME) (PASSWORD)
    seed_armbian_torrents -h

Examples:
    seed_armbian_torrents "http://localhost:8080" "admin" "adminadmin"
    seed_armbian_torrents "https://cat.seedhost.eu/lol/qbittorrent" "lol" "pw"

Options:
    -h, --help         show this help message and exit.
"""

import os
from io import BytesIO
from tempfile import TemporaryDirectory
from zipfile import ZipFile

import requests
from docopt import docopt
from qbittorrent import Client

if __name__ == "__main__":
    args = docopt(__doc__)

    # Initialize client and login
    qb = Client(args["HOSTNAME"])
    qb.login(username=args["USERNAME"], password=args["PASSWORD"])

    with TemporaryDirectory() as tmp_dir:
        req = requests.get(
            "https://dl.armbian.com/torrent/all-torrents.zip",
            stream=True,
            timeout=60,
        )

        with ZipFile(BytesIO(req.content)) as zip_file:
            zip_file.extractall(tmp_dir)

        torrents = qb.torrents()
        for torrent in torrents:
            if "Armbian" in torrent["name"]:
                qb.delete_permanently(torrent["hash"])
                print(f"Removed {torrent['name']}")

        torrent_files = os.listdir(tmp_dir)
        for torrent_file in torrent_files:
            with open(os.path.join(tmp_dir, torrent_file), "rb") as tf:
                qb.download_from_file(tf, category="distro")
            print(
                f"Added {os.path.basename(os.path.join(tmp_dir, torrent_file))}"
            )