#!/usr/bin/env python3

import os, subprocess, requests, configparser
from collections import namedtuple

os.chdir(os.path.dirname(__file__))
os.chdir('..')

os.environ['CUSTOM_COMPILE_COMMAND'] = "bin/update_constraints"
subprocess.check_call([
    'pip-compile',
    '--allow-unsafe',
    '--generate-hashes',
    '--upgrade',
    'cibuildwheel/resources/constraints.in',
])
subprocess.check_call([
    './env2/bin/pip-compile',
    '--allow-unsafe',
    '--generate-hashes',
    '--upgrade',
    'cibuildwheel/resources/constraints.in',
    '--output-file', 'cibuildwheel/resources/constraints-python27.txt'
])

Image = namedtuple('Image', ['manylinux_version', 'arch'])

images = [
    Image('manylinux1', 'x86_64'), Image('manylinux1', 'i686'), 
    Image('manylinux2010', 'x86_64'), Image('manylinux2010', 'i686'), 
    Image('manylinux2014', 'x86_64'), Image('manylinux2014', 'i686'), 
]

config = configparser.ConfigParser()

for image in images:
    repository_name = '{}_{}'.format(image.manylinux_version, image.arch)
    quay_api_url = 'https://quay.io/api/v1/repository/pypa/{}?includeTags=true'.format(repository_name)
    repo_info = requests.get(quay_api_url).json()
    tags_dict = repo_info['tags']

    latest_tag = tags_dict.pop('latest')

    # find the tag whose manifest matches 'latest'
    tag_name = next(
        name 
        for (name, info) in tags_dict.items() 
        if info['manifest_digest'] == latest_tag['manifest_digest']
    )

    image_name = 'quay.io/pypa/{}_{}:{}'.format(image.manylinux_version, image.arch, tag_name)

    if not config.has_section(image.manylinux_version):
        config[image.manylinux_version] = {}

    config[image.manylinux_version][image.arch] = image_name

with open('cibuildwheel/resources/pinned_docker_images.cfg', 'w') as f:
    config.write(f)
