#!/usr/bin/env python3
# Copyright 2019 Google LLC
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Run this script to re-generate the `all_examples.cpp` file after adding or
deleting example fiddles.
"""
import argparse
import difflib
import glob
import os

ALL_EXAMPLES = 'all_examples.cpp'


parser = argparse.ArgumentParser()
parser.add_argument(
    '--print-diff',
    action='store_true',
    help='Print the diff between the old and new `all_examples.cpp` file.',
)
args = parser.parse_args()


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

with open(ALL_EXAMPLES, 'r') as o:
    prev_lines = o.readlines()

with open(ALL_EXAMPLES, 'w+') as o:
    o.write(
        '// Copyright 2019 Google LLC\n// Use of this source code is '
        'governed by a BSD-style license that can be found in the '
        'LICENSE file.\n'
    )
    for path in sorted(glob.glob('../../docs/examples/*.cpp')):
        # strip ../../
        path = path[6:]
        o.write('#include "%s"\n' % path)

if args.print_diff:
    with open(ALL_EXAMPLES, 'r') as o:
        diff = difflib.unified_diff(prev_lines, o.readlines())
        print(''.join(diff))
