#!/usr/bin/env python3
# Copyright 2020 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Generates an array of images to be preloaded as a ES6 Module."""

import argparse
import json
import os
import shlex
import sys
from typing import List


def gen_preload_images_js(
    in_app_images: List[str], standalone_images: List[str]
) -> str:
    images = {}
    for image in in_app_images:
        with open(image, 'r', encoding='utf-8') as f:
            images[os.path.basename(image)] = f.read()

    filenames = [os.path.basename(f) for f in standalone_images]
    formatted_images = (
        '['
        + ','.join(
            f'[{json.dumps(name)}, svg`{image}`]'
            for name, image in images.items()
        )
        + ']'
    )
    return (
        'import {svg} from "chrome://resources/mwc/lit/index.js";'
        f'export const preloadImagesList = {json.dumps(filenames, indent=2)};'
        f'export const preloadedImages = new Map({formatted_images});'
    )


def main():
    argument_parser = argparse.ArgumentParser()
    argument_parser.add_argument(
        '--output_file', help='The output js file exporting preload images'
    )
    argument_parser.add_argument(
        '--in_app_images_file',
        help='File contains a list of images to be appended',
    )
    argument_parser.add_argument(
        '--standalone_images',
        help='File contains a list of standalone images to be appended',
        nargs='*',
    )
    args = argument_parser.parse_args()
    with open(args.in_app_images_file) as f:
        in_app_images = shlex.split(f.read())

    with open(args.output_file, 'w', encoding='utf-8') as f:
        f.write(gen_preload_images_js(in_app_images, args.standalone_images))

    return 0


if __name__ == '__main__':
    sys.exit(main())
