#!/usr/bin/env python3

"""This script splits httplib.h into .h and .cc parts."""

import argparse
import os
import sys

border = '// ----------------------------------------------------------------------------'

args_parser = argparse.ArgumentParser(description=__doc__)
args_parser.add_argument(
    "-e", "--extension", help="extension of the implementation file (default: cc)",
    default="cc"
)
args_parser.add_argument(
    "-o", "--out", help="where to write the files (default: out)", default="out"
)
args = args_parser.parse_args()

cur_dir = os.path.dirname(sys.argv[0])
lib_name = 'httplib'
header_name = '/' + lib_name + '.h'
source_name = '/' + lib_name + '.' + args.extension
# get the input file
in_file = cur_dir + header_name
# get the output file
h_out = args.out + header_name
cc_out = args.out + source_name

# if the modification time of the out file is after the in file,
# don't split (as it is already finished)
do_split = True

if os.path.exists(h_out):
    in_time = os.path.getmtime(in_file)
    out_time = os.path.getmtime(h_out)
    do_split = in_time > out_time

if do_split:
    with open(in_file) as f:
        lines = f.readlines()

    python_version = sys.version_info[0]
    if python_version < 3:
        os.makedirs(args.out)
    else:
        os.makedirs(args.out, exist_ok=True)

    in_implementation = False
    cc_out = args.out + source_name
    with open(h_out, 'w') as fh, open(cc_out, 'w') as fc:
        fc.write('#include "httplib.h"\n')
        fc.write('namespace httplib {\n')
        for line in lines:
            is_border_line = border in line
            if is_border_line:
                in_implementation = not in_implementation
            elif in_implementation:
                fc.write(line.replace('inline ', ''))
            else:
                fh.write(line)
        fc.write('} // namespace httplib\n')

    print("Wrote {} and {}".format(h_out, cc_out))
else:
    print("{} and {} are up to date".format(h_out, cc_out))