#!/usr/bin/env python3
# Copyright (C) 2018 RDA Technologies Limited and/or its affiliates("RDA").
# All rights reserved.
#
# This software is supplied "AS IS" without any warranties.
# RDA assumes no responsibility or liability for the use of the software,
# conveys no license or title under any patent, copyright, or mask work
# right to the product. RDA reserves the right to make changes in the
# software without notification.  RDA also make no representation or
# warranty that such application will be suitable for the specified use
# without further testing or modification.

import os
import sys
import io
import argparse


def main(argv):
    parser = argparse.ArgumentParser(usage='change or add copyright header')
    parser.add_argument('--force', dest='force_mode', choices=['c', 'sharp'],
                        help='force file mode')
    parser.add_argument('fnames', nargs='+', help='file names')

    args = parser.parse_args(argv)

    copy_c = '''/* Copyright (C) 2018 RDA Technologies Limited and/or its affiliates("RDA").
 * All rights reserved.
 *
 * This software is supplied "AS IS" without any warranties.
 * RDA assumes no responsibility or liability for the use of the software,
 * conveys no license or title under any patent, copyright, or mask work
 * right to the product. RDA reserves the right to make changes in the
 * software without notification.  RDA also make no representation or
 * warranty that such application will be suitable for the specified use
 * without further testing or modification.
 */

'''
    copy_s = '''# Copyright (C) 2018 RDA Technologies Limited and/or its affiliates("RDA").
# All rights reserved.
#
# This software is supplied "AS IS" without any warranties.
# RDA assumes no responsibility or liability for the use of the software,
# conveys no license or title under any patent, copyright, or mask work
# right to the product. RDA reserves the right to make changes in the
# software without notification.  RDA also make no representation or
# warranty that such application will be suitable for the specified use
# without further testing or modification.

'''

    for fname in args.fnames:
        with open(fname, 'r') as fh:
            lines = fh.readlines()

        hashbang = None
        detect_c = False
        detect_s = False

        if lines and lines[0].startswith('#!'):
            hashbang = lines[0]
            lines = lines[1:]

        while lines:
            if lines[0].strip() == '':
                lines = lines[1:]
            else:
                break

        if lines:
            if lines[0].startswith('/* Copyright') and 'RDA' in lines[0]:
                detect_c = True
                while lines:
                    line = lines[0]
                    lines = lines[1:]
                    if line.strip() == '*/':
                        break
            elif lines[0].startswith('# Copyright') and 'RDA' in lines[0]:
                detect_s = True
                while lines:
                    line = lines[0]
                    if not line.startswith('#'):
                        break
                    lines = lines[1:]

        while lines:
            if lines[0].strip() == '':
                lines = lines[1:]
            else:
                break

        mode = None
        if args.force_mode:
            mode = args.force_mode
        elif detect_c:
            mode = 'c'
        elif detect_s:
            mode = 'sharp'
        else:
            print('{}: unknown file type, ignored'.format(fname))
            continue

        if mode == 'c' and detect_s:
            print('{}: unlike to be c, ignored'.format(fname))
            continue
        if mode == 'sharp' and detect_c:
            print('{}: unlike to use #, ignored'.format(fname))
            continue

        if mode == 'c':
            with open(fname, 'w') as fh:
                fh.write(copy_c)
                fh.write(''.join(lines))
        else:
            with open(fname, 'w') as fh:
                if hashbang:
                    fh.write(hashbang)
                fh.write(copy_s)
                fh.write(''.join(lines))

    return 0


if __name__ == '__main__':
    sys.exit(main(sys.argv[1:]))
