# text parts
processed_files = { }

# authors
for filename in ['AUTHORS', 'CONTRIBUTORS']:
  with open(filename, encoding='utf8') as f:
    text = ''
    for line in f:
      if filename == 'AUTHORS':
        text += '// fast_float by ' + line
      if filename == 'CONTRIBUTORS':
        text += '// with contributions from ' + line
    processed_files[filename] = text + '//\n//\n'

# licenses
for filename in ['LICENSE-MIT', 'LICENSE-APACHE', 'LICENSE-BOOST']:
  lines = []
  with open(filename, encoding='utf8') as f:
    lines = f.readlines()

  # Retrieve subset required for inclusion in source
  if filename == 'LICENSE-APACHE':
    lines = [
      '   Copyright 2021 The fast_float authors\n',
      *lines[179:-1]
    ]

  text = ''
  for line in lines:
    text += '//    ' + line.strip() + '\n'
  processed_files[filename] = text

# code
for filename in [ 'constexpr_feature_detect.h', 'float_common.h', 'fast_float.h', 'ascii_number.h',
                  'fast_table.h', 'decimal_to_binary.h', 'bigint.h', 'digit_comparison.h', 'parse_number.h']:
  with open('include/fast_float/' + filename, encoding='utf8') as f:
    text = ''
    for line in f:
      if line.startswith('#include "'): continue
      text += line
    processed_files[filename] = '\n' + text

# command line
import argparse

parser = argparse.ArgumentParser(description='Amalgamate fast_float.')
parser.add_argument('--license', default='TRIPLE', choices=['DUAL', 'TRIPLE', 'MIT', 'APACHE', 'BOOST'], help='choose license')
parser.add_argument('--output', default='', help='output file (stdout if none')

args = parser.parse_args()

def license_content(license_arg):
  result = []
  if license_arg == 'TRIPLE':
    result += [
      '// Licensed under the Apache License, Version 2.0, or the\n',
      '// MIT License or the Boost License. This file may not be copied,\n',
      '// modified, or distributed except according to those terms.\n',
      '//\n'
    ]
  if license_arg == 'DUAL':
    result += [
      '// Licensed under the Apache License, Version 2.0, or the\n',
      '// MIT License at your option. This file may not be copied,\n',
      '// modified, or distributed except according to those terms.\n',
      '//\n'
    ]

  if license_arg in ('DUAL', 'TRIPLE', 'MIT'):
    result.append('// MIT License Notice\n//\n')
    result.append(processed_files['LICENSE-MIT'])
    result.append('//\n')
  if license_arg in ('DUAL', 'TRIPLE', 'APACHE'):
    result.append('// Apache License (Version 2.0) Notice\n//\n')
    result.append(processed_files['LICENSE-APACHE'])
    result.append('//\n')
  if license_arg in ('TRIPLE', 'BOOST'):
    result.append('// BOOST License Notice\n//\n')
    result.append(processed_files['LICENSE-BOOST'])
    result.append('//\n')

  return result

text = ''.join([
  processed_files['AUTHORS'], processed_files['CONTRIBUTORS'],
  *license_content(args.license),
  processed_files['constexpr_feature_detect.h'],
  processed_files['float_common.h'], processed_files['fast_float.h'],
  processed_files['ascii_number.h'], processed_files['fast_table.h'],
  processed_files['decimal_to_binary.h'], processed_files['bigint.h'],
  processed_files['digit_comparison.h'], processed_files['parse_number.h']])

if args.output:
  with open(args.output, 'wt', encoding='utf8') as f:
    f.write(text)
else:
  print(text)
