#!/usr/bin/env bash
# Territory War – pobiera pełną paczkę (gracz / CurseForge / serwer) z kawałków i skleja ją w jeden zip.
set -e
cd "$(dirname "$0")"
BASE_URL="${TW_URL:-https://territorywar-pack.pages.dev}"
WHICH="${1:-}"
python3 - "$BASE_URL" "$WHICH" <<'PYTHON'
import hashlib, json, os, sys, urllib.request

base, which = sys.argv[1].rstrip("/"), sys.argv[2]

def fetch(rel):
    request = urllib.request.Request(base + "/" + rel, headers={"User-Agent": "TerritoryWar-pobieracz/1.0"})
    with urllib.request.urlopen(request, timeout=120) as response:
        return response.read()

files = json.loads(fetch("pelne/pliki.json"))["files"]
if not which:
    print("Które paczki chcesz?")
    for index, entry in enumerate(files, 1):
        print(f"  {index}. {entry['label']:11s} {entry['path']}  ({entry['size'] // (1024 * 1024)} MB)")
    choice = input("Numer (Enter = 1): ").strip() or "1"
    entry = files[int(choice) - 1]
else:
    entry = next(e for e in files if e["label"] == which or e["path"] == which)

print("Pobieram", entry["path"], f"({entry['size'] // (1024 * 1024)} MB)")
digest = hashlib.sha256()
with open(entry["path"] + ".czesciowy", "wb") as out:
    for number, part in enumerate(entry.get("parts") or [entry["path"]], 1):
        print(f"  kawałek {number}/{len(entry.get('parts') or [1])}")
        chunk = fetch("pelne/" + part if not part.startswith("pelne/") else part)
        digest.update(chunk)
        out.write(chunk)
if digest.hexdigest() != entry["sha256"]:
    os.remove(entry["path"] + ".czesciowy")
    raise SystemExit("Suma kontrolna się nie zgadza – spróbuj jeszcze raz.")
os.replace(entry["path"] + ".czesciowy", entry["path"])
print("Gotowe:", entry["path"])
PYTHON
