#!/usr/bin/env python3
"""Build a catalog wheel with its complete corresponding source offer, using committed files."""
import io
import pathlib
import subprocess
import sys
import tarfile
import tempfile

root = pathlib.Path(__file__).resolve().parents[2]
out = pathlib.Path(sys.argv[1]).absolute()
out.mkdir(parents=True, exist_ok=True)
sha = subprocess.check_output(["git", "rev-parse", "HEAD"], cwd=root, text=True).strip()
archive = subprocess.check_output(["git", "archive", "--format=tar", sha, "catalog"], cwd=root)
with tempfile.TemporaryDirectory(prefix="catalog-build-") as directory:
    target = pathlib.Path(directory)
    with tarfile.open(fileobj=io.BytesIO(archive)) as tar:
        # git archive contains only our committed, reviewed tree. Refuse links anyway.
        for member in tar.getmembers():
            if not (member.isfile() or member.isdir()) or ".." in pathlib.PurePosixPath(member.name).parts:
                raise SystemExit("catalog sources must contain only regular files/directories")
        tar.extractall(target, filter="data")
    package = target / "catalog"
    static = package / "src/battlelab_catalog/static"
    static.mkdir(exist_ok=True)
    with tarfile.open(static / "source.tar.gz", "w:gz") as tar:
        with tarfile.open(fileobj=io.BytesIO(archive)) as original:
            for member in original.getmembers():
                tar.addfile(member, original.extractfile(member) if member.isfile() else None)
    (static / "revision.txt").write_text(sha + "\n")
    subprocess.run([sys.executable, "-m", "build", "--wheel", "--outdir", str(out), str(package)], check=True)
print(sha)
