#!/usr/bin/env python3
# SPDX-License-Identifier: MPL-2.0
# Copyright ijl (2025-2026)

import sys
from pathlib import Path

import tomllib

dist = sys.argv[1]

pyproject_doc = tomllib.loads(Path("pyproject.toml").read_text(encoding="utf-8"))
pyproject_version = pyproject_doc["project"]["version"]

prefix = f"orjson-{pyproject_version}"

MANYLINUX_2_17 = [
    "manylinux2014_armv7l.manylinux_2_17_armv7l",
    "manylinux2014_i686.manylinux_2_17_i686",
    "manylinux_2_17_aarch64.manylinux2014_aarch64",
    "manylinux_2_17_x86_64.manylinux2014_x86_64",
]

MANYLINUX_2_39 = [
    "manylinux_2_39_aarch64",
    "manylinux_2_39_armv7l",
    "manylinux_2_39_i686",
    "manylinux_2_39_x86_64",
]

MACOS_ARM64 = [
    "macosx_15_0_arm64",
]

WIN_ARM64 = [
    "win_arm64",
]

MACOS_UNIVERSAL2 = [
    "macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2",
]

MUSLLINUX = [
    "musllinux_1_2_aarch64",
    "musllinux_1_2_x86_64",
]

WIN_AMD64_I686 = [
    "win32",
    "win_amd64",
]

ABIS = (
    "cp310-cp310",
    "cp311-cp311",
    "cp312-cp312",
    "cp313-cp313",
    "cp314-cp314",
    "cp315-cp315",
)


wheels_matrix = set()

for abi in ABIS:
    tags = []
    tags.extend(MACOS_UNIVERSAL2)
    tags.extend(MUSLLINUX)
    tags.extend(WIN_AMD64_I686)

    if abi > "cp310-cp310":
        tags.extend(MACOS_ARM64)
        tags.extend(WIN_ARM64)

    if abi < "cp315-cp315":
        tags.extend(MANYLINUX_2_17)
    else:
        tags.extend(MANYLINUX_2_39)

    for tag in tags:
        # orjson-3.10.15-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl
        wheels_matrix.add(f"{prefix}-{abi}-{tag}.whl")

wheels_unique = set()

wheels_expected = wheels_matrix | wheels_unique

wheels_queued = set(
    str(each).replace(f"{dist}/", "") for each in Path(dist).glob("*.whl")
)

exit_code = 0

# sdist
sdist_path = Path(f"{dist}/{prefix}.tar.gz")
if sdist_path.exists():
    print("sdist present\n")
else:
    exit_code = 1
    print(f"Missing sdist:\n{sdist_path}\n")

# whl
if wheels_expected == wheels_queued:
    print(f"Wheels as expected, {len(wheels_queued)} total\n")
else:
    exit_code = 1

    missing = "\n".join(sorted(wheels_expected - wheels_queued))
    if missing:
        print(f"Missing wheels:\n{missing}\n")

    additional = "\n".join(sorted(wheels_queued - wheels_expected))
    if additional:
        print(f"Unexpected wheels:\n{additional}\n")

sys.exit(exit_code)
