"""CLI: python scripts/download_dataset.py <dataset_name>

Registered datasets: see DATASET_REGISTRY in gps_denied.testing.download.
Entries with an empty URL are manual-download-only (e.g. EuRoC via ETH
Research Collection, VPAIR via a Zenodo form) — this script prints the
instructions and exits instead of guessing a download URL.
"""

import sys
from pathlib import Path

from gps_denied.testing.download import DATASET_REGISTRY, download_dataset


def main(argv: list[str]) -> int:
    if len(argv) != 2:
        print(f"usage: {argv[0]} <dataset_name>", file=sys.stderr)
        print(f"available: {', '.join(DATASET_REGISTRY)}", file=sys.stderr)
        return 2
    name = argv[1]
    if name not in DATASET_REGISTRY:
        print(f"unknown dataset: {name}", file=sys.stderr)
        print(f"available: {', '.join(DATASET_REGISTRY)}", file=sys.stderr)
        return 2
    spec = DATASET_REGISTRY[name]
    if not spec.url:
        print(
            f"Dataset '{name}' has no automated download URL.",
            file=sys.stderr,
        )
        print(
            "Fetch manually, then place the archive so its SHA256 matches:\n"
            f"  expected sha256: {spec.sha256}\n"
            f"  expected path subdir under datasets/: {spec.target_subdir}\n"
            "See DATASET_REGISTRY comments in src/gps_denied/testing/download.py "
            "for per-dataset instructions.",
            file=sys.stderr,
        )
        return 3
    root = Path("datasets") / spec.target_subdir
    dest = root / Path(spec.url).name
    print(f"→ {dest}")
    download_dataset(spec, dest)
    print("OK")
    return 0


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