"""Fetch official build tools for the original Room for Change GWT source."""
from pathlib import Path
import requests, hashlib, json, zipfile
ROOT=Path(__file__).resolve().parents[1]
OUT=ROOT/'vendor'/'gwt-build-tools';OUT.mkdir(parents=True,exist_ok=True)
session=requests.Session()
records=[]
def download(url,name,expected=None):
    dest=OUT/name
    if not dest.exists():
        response=session.get(url,timeout=90);response.raise_for_status();dest.write_bytes(response.content)
    digest=hashlib.sha256(dest.read_bytes()).hexdigest()
    if expected and digest!=expected:raise ValueError('Checksum mismatch: '+name)
    records.append({'name':name,'url':url,'sha256':digest,'bytes':dest.stat().st_size})
    print('Fetched',name,dest.stat().st_size,flush=True)
    return dest
info=session.get('https://api.adoptium.net/v3/assets/latest/8/hotspot?architecture=x64&image_type=jre&os=windows',timeout=40);info.raise_for_status()
package=info.json()[0]['binary']['package']
archive=download(package['link'],'temurin-jre8.zip',package['checksum'])
with zipfile.ZipFile(archive) as z:
    for member in z.infolist():
        target=(OUT/member.filename).resolve()
        if not target.is_relative_to(OUT.resolve()):raise ValueError('Unsafe JRE archive path')
    z.extractall(OUT)
for artifact in ['gwt-dev','gwt-user']:
    download(f'https://repo.maven.apache.org/maven2/com/google/gwt/{artifact}/2.5.1/{artifact}-2.5.1.jar',artifact+'-2.5.1.jar')
for suffix in ['', '-sources']:
    download('https://repo.maven.apache.org/maven2/javax/validation/validation-api/1.0.0.GA/validation-api-1.0.0.GA'+suffix+'.jar','validation-api'+suffix+'.jar')
(OUT/'provenance.json').write_text(json.dumps(records,indent=2),encoding='utf-8')
print('Java:',next(OUT.glob('*/bin/java.exe')),flush=True)
