#!/usr/bin/env python3
# SPDX-License-Identifier: AGPL-3.0-only
# Copyright 2026-present the Unsloth AI Inc. team. All rights reserved. See /studio/LICENSE.AGPL-3.0

"""Relax strict metadata pins so pip check passes on the single-env stack.

Why:
- data-designer pins huggingface-hub>=1.0.1 and pyarrow<20.
- unsloth/transformers pins huggingface-hub<1.
- studio datasets pins pyarrow>=21.

Runtime works with hub 0.36.x + pyarrow 23.x; only the metadata conflicts.
"""

from __future__ import annotations

import importlib.metadata as im
import re
from pathlib import Path

TARGETS = (
    "data-designer",
    "data-designer-engine",
    "data-designer-config",
)

PATCHES: tuple[tuple[re.Pattern[str], str], ...] = (
    (
        re.compile(r"^Requires-Dist: huggingface-hub<2,>=1\.0\.1$", re.MULTILINE),
        "Requires-Dist: huggingface-hub<2,>=0.34.0",
    ),
    (
        re.compile(r"^Requires-Dist: pyarrow<20,>=19\.0\.1$", re.MULTILINE),
        "Requires-Dist: pyarrow>=21.0.0",
    ),
)


def metadata_path(dist_name: str) -> Path | None:
    try:
        dist = im.distribution(dist_name)
    except im.PackageNotFoundError:
        return None
    for f in dist.files or []:
        sf = str(f)
        if sf.endswith(".dist-info/METADATA"):
            return Path(dist.locate_file(f))
    return None


def patch_file(path: Path) -> bool:
    original = path.read_text(encoding = "utf-8")
    updated = original
    for pattern, repl in PATCHES:
        updated = pattern.sub(repl, updated)
    if updated == original:
        return False
    path.write_text(updated, encoding = "utf-8")
    return True


def main() -> int:
    changed = 0
    checked = 0
    for name in TARGETS:
        p = metadata_path(name)
        if p is None:
            continue
        checked += 1
        if patch_file(p):
            changed += 1
    print(f"single-env metadata patch: checked={checked}, changed={changed}")
    return 0


if __name__ == "__main__":
    raise SystemExit(main())
