#!/usr/bin/env python2.7

import sys
import os

_APP_PATH = \
    os.path.join(os.path.dirname(__file__), '..', '..', '..')

sys.path.insert(0, os.path.abspath(_APP_PATH))

import logging
import argparse
import re

import pm.config.log
import pm.manifest

_LOGGER = logging.getLogger(__name__)

def _parse_args():
    description = "Show the patches that have been applied to the application."
    parser = argparse.ArgumentParser(description=description)

    parser.add_argument(
        'root_path',
        help='Root path')

    parser.add_argument(
        '-j', '--json',
        action='store_true',
        help="Print result in JSON")

    args = parser.parse_args()

    return args

def _main():
    args = _parse_args()

    root_path = args.root_path
    do_print_json = args.json

    m = pm.manifest.Manifest(root_path)

    (patches, affected_rel_filepaths) = m.get_applied_patches()

    if do_print_json is True:
        result = {
            'patches': patches,
            'total_affected_files': affected_rel_filepaths
        }
    else:
        print("Applied Patches")
        print('---------------')
        print('')

        for patch_info in patches:
            print(patch_info['patch_name'])

        print('')

        print("Affected Files")
        print('--------------')
        print('')

        for rel_filepath in affected_rel_filepaths:
            print(rel_filepath)

    if do_print_json is True:
        print(pm.utility.pretty_json_dumps(result))
    else:
        print('')

if __name__ == '__main__':
    pm.config.log.configure_log()
    _main()
