#!/usr/bin/env python3
import sys
import os
from argparse import ArgumentParser
from git_reqs.requirementmodule import requirement_module, init_module
from git_reqs import importtools
from git_reqs import exporttools


def init(args):
    if args.upgrade:
        req_module = requirement_module(args.parent_path + '/' + args.module)
        req_module.upgrade_module()
    else:
        assert args.module_prefix, "Module prefix is required"
        init_module(
            args.parent_path, args.module, args.module_prefix, args.req_numbering_format)


def import_reqs(args):
    module_path = args.project_root + '/' + args.module
    project = requirement_module(args.project_root)
    req_module = project.modules[args.module]
    if args.format == 'junit':
        importtools.add_test_results(module_path, args.file)
        project = requirement_module(args.project_root)
    elif args.format == 'xls':
        importtools.import_from_xls(req_module, args.file)
    elif args.format == 'md':
        importtools.import_from_markdown(req_module, args.file)
    else:
        assert False

    req_module.write_reqs()


def export_reqs(args):
    project = requirement_module(args.project_root)
    req_module = project.modules[args.module]
    if args.format == 'xls':
        exporttools.convert_to_xls(req_module)
    elif args.format == 'md':
        exporttools.convert_to_markdown(req_module)


def create_report(args):
    project = requirement_module(args.project_root)

    if args.type == 'relations':
        exporttools.create_report(project, args.module)


if __name__ == "__main__":
    args_parser = ArgumentParser()
    subparsers = args_parser.add_subparsers()

    export_parser = subparsers.add_parser(
        "export", help="Read requirement module")
    export_parser.add_argument(
        "--project_root", help="Root path to the req project", default=os.getcwd())
    export_parser.add_argument("--module", help="Name of requirement module")
    export_parser.add_argument(
        "--format", help="Export format, xls and md are valid")
    export_parser.set_defaults(func=export_reqs)

    import_parser = subparsers.add_parser(
        "import", help="Read requirement module")
    import_parser.add_argument(
        "--project_root", help="Root path to the req project", default=os.getcwd())
    import_parser.add_argument("--module", help="Name of requirement module")
    import_parser.add_argument(
        "--format", help="Export format, xls and junit are valid")
    import_parser.add_argument(
        "--file", help="Path to file to import, xls or junit is valid")
    import_parser.set_defaults(func=import_reqs)

    report_parser = subparsers.add_parser(
        "report", help="Read requirement module")
    report_parser.add_argument(
        "--project_root", help="Root path to the req project", default=os.getcwd())
    report_parser.add_argument("--module", help="Name of requirement module")
    report_parser.add_argument(
        "--type", help="Report type, relations are valid")
    report_parser.set_defaults(func=create_report)

    init_parser = subparsers.add_parser(
        "init", help="Init new requirement module")
    init_parser.add_argument(
        "--parent_path", help="Root path to the req project", default=os.getcwd())
    init_parser.add_argument(
        "--module", help="Name of the new requirement module", default='')
    init_parser.add_argument(
        "--module_prefix", help="Project prefix of the new requirement module")
    init_parser.add_argument(
        "--req_numbering_format", help="Numbering format of the reqs, numbers or time-hash are valid", default='time-hash')
    init_parser.add_argument(
        "--upgrade", action='store_true', help="Upgrade existing module to current format version")
    init_parser.set_defaults(func=init)

    args = args_parser.parse_args(sys.argv[1:])

    if hasattr(args, 'func'):
        args.func(args)
    else:
        args_parser.print_usage()
