#!/usr/bin/env vpython3

#  Copyright (c) 2020 The WebRTC project authors. All Rights Reserved.
#
# Use of this source code is governed by a BSD-style license
# that can be found in the LICENSE file in the root of the source
# tree. An additional intellectual property rights grant can be found
# in the file PATENTS.  All contributing project authors may
# be found in the AUTHORS file in the root of the source tree.

import argparse
import re
import sys


def _ReplaceDoubleQuote(line):
  re_rtc_import = re.compile(r'(\s*)#import\s+"(\S+/|)(\w+\+|)RTC(\w+)\.h"(.*)',
                             re.DOTALL)
  match = re_rtc_import.match(line)
  if not match:
    return line

  return '%s#import <WebRTC/%sRTC%s.h>%s' % (match.group(1), match.group(3),
                                             match.group(4), match.group(5))


def Process(input_file, output_file):
  with open(input_file, 'rb') as fb, open(output_file, 'wb') as fw:
    for line in fb.read().decode('UTF-8').splitlines():
      fw.write(_ReplaceDoubleQuote(line).encode('UTF-8'))
      fw.write(b"\n")


def main():
  parser = argparse.ArgumentParser(
      description=
      "Copy headers of framework and replace double-quoted includes to" +
      " angle-bracketed respectively.")
  parser.add_argument('--input', help='Input header files to copy.', type=str)
  parser.add_argument('--output', help='Output file.', type=str)
  parsed_args = parser.parse_args()
  return Process(parsed_args.input, parsed_args.output)


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