"""Optional headless free-token issuance. pip install requests

Writes to a private file instead of printing the credential.
"""
import argparse
import hashlib
import os
from pathlib import Path

import requests


def issue(path):
    base = "https://mcp.amazingcat.net"
    response = requests.get(base + "/issue/challenge", timeout=30)
    response.raise_for_status()
    challenge = response.json()
    for number in range(challenge["maxnumber"] + 1):
        digest = hashlib.sha256((challenge["salt"] + str(number)).encode()).hexdigest()
        if digest == challenge["challenge"]:
            break
    else:
        raise RuntimeError("No proof-of-work solution")
    response = requests.post(base + "/issue", json={**challenge, "n": number}, timeout=30)
    response.raise_for_status()
    result = response.json()
    # Exclusive create: do not overwrite an existing token or follow a symlink.
    fd = os.open(path, os.O_WRONLY | os.O_CREAT | os.O_EXCL, 0o600)
    with os.fdopen(fd, "w") as output:
        output.write(result["token"] + "\n")
    return {k: result[k] for k in ("tier", "rpm", "daily", "endpoint")}


if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument("output", type=Path)
    print(issue(parser.parse_args().output))
