"""Extract compile-only Java 17 API signatures from a newer OpenJDK ct.sym.

This prepares a static asset; it never compiles the user's program.
Use locally for evaluation. Preserve upstream licenses before redistribution.
"""
from pathlib import Path
import sys
import zipfile

source = Path(sys.argv[1]) / 'lib' / 'ct.sym'
destination = Path(__file__).resolve().parent.parent / 'web/vendor/java17-api.jar'
entries = {}
with zipfile.ZipFile(source) as archive:
    for name in archive.namelist():
        parts = name.split('/')
        if len(parts) < 3 or 'H' not in parts[0] or not name.endswith('.sig'):
            continue
        relative = '/'.join(parts[2:])[:-4] + '.class'
        if relative == 'module-info.class':
            continue
        data = archive.read(name)
        if relative in entries and entries[relative] != data:
            raise ValueError(f'conflicting signature: {relative}')
        entries[relative] = data
if not entries:
    raise ValueError('Java 17 signatures not found: use a newer OpenJDK containing release H')
with zipfile.ZipFile(destination, 'w', zipfile.ZIP_DEFLATED) as archive:
    for name, data in sorted(entries.items()):
        archive.writestr(name, data)
print(f'{len(entries)} compile-only signatures -> {destination}')
