#!/usr/bin/env python3
#
# Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
# for details. All rights reserved. Use of this source code is governed by a
# BSD-style license that can be found in the LICENSE file.
#

# Finds files in the given directories and their subdirectories, and prints them
# in the json format expected by GN fuchsia_component's resources arg:
# [
#   {
#     "path": "path/to/file.dart",
#     "dest": "data/path/to/file.dart"
#   },
#   ...
# ]

import sys
import os

from os.path import join, abspath, relpath

DART_DIR = abspath(join(__file__, '..', '..', '..'))


def listFiles(path):
    allFiles = []
    for dirpath, dirs, files in os.walk(join(DART_DIR, path)):
        allFiles += [
            relpath(abspath(join(dirpath, p)), DART_DIR) for p in files
        ]
    return allFiles


def printOutput(files):
    print('[')
    print(',\n'.join([
        '  {\n    "path": "%s",\n    "dest": "data/%s"\n  }' % (f, f)
        for f in files
    ]))
    print(']')


def main():
    if len(sys.argv) < 2:
        print('Expected at least 1 arg, the paths to search.')
        return 1
    allFiles = []
    for directory in sys.argv[1:]:
        files = listFiles(directory)
        if len(files) == 0:
            print('Did not find any files in the directory: ' + directory)
            return 2
        allFiles += files
    printOutput(sorted(allFiles))
    return 0


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