#!/usr/bin/python3

import os
import json


airgapped_dir = os.environ.get("AIRGAPPED_WORKSPACE")
if not airgapped_dir:
    raise EnvironmentError("AIRGAPPED_WORKSPACE is not set")


def iter_files(root_dir):
    for root, _, files in os.walk(root_dir):
        for item in files:
            yield root_dir, os.path.relpath(str(os.path.join(root, item)),
                                            start=root_dir)


def iter_images(root_dir):
    for root, _, files in os.walk(root_dir):
        for filename in files:
            if filename == 'index.json':
                with open(str(os.path.join(root, filename))) as f:
                    data = json.load(f)
                for item in data['manifests']:
                    yield item['annotations']['org.opencontainers.image.ref.name']


def scan_files_dir(root_dir, output_file):
    print(f"Scanning {root_dir} ...")
    with open(output_file, "w") as f:
        for _, filename in iter_files(root_dir):
            f.write(f"{filename}\n")


def scan_images_dir(root_dir, output_file):
    print(f"Scanning {root_dir} ...")
    with open(output_file, "w") as f:
        for ref_name in iter_images(root_dir):
            f.write(f"{ref_name}\n")


scan_files_dir(os.path.join(airgapped_dir, 'files', 'by-name', 'binary.mirantis.com'),
               os.path.join(airgapped_dir, 'shared', 'binary_files.txt'))

scan_files_dir(os.path.join(airgapped_dir, 'files', 'by-name', 'mirror.mirantis.com'),
               os.path.join(airgapped_dir, 'shared', 'debian_repo_files.txt'))

scan_files_dir(os.path.join(airgapped_dir, 'files', 'by-name', 'repos.mirantis.com'),
               os.path.join(airgapped_dir, 'shared', 'mcr_repo_files.txt'))

scan_images_dir(os.path.join(airgapped_dir, 'images', 'by-name', 'mirantis.azurecr.io'),
               os.path.join(airgapped_dir, 'shared', 'docker_images.txt'))
