#!/usr/bin/env python

import argparse
import sys

from flatcat import cmd
from flatcat.exception import ArgumentException
from flatcat.flatcat import _logger


def main(argv):
    parser = cmd.get_flatcat_argparser()
    parser.prog = 'flatcat-segment'
    parser.epilog = """
Simple usage example (load a saved model and use it to segment test corpus):

  %(prog)s analysis.tar.gz --remove-nonmorphemes \\
        -o test_corpus.segmented test_corpus.txt

"""
    keep_options = ['initfile', 'loadparamsfile', 'outfile', 'encoding',
                    'outputformat', 'outputconseparator',
                    'outputtagseparator', 'test_output_tags',
                    'outputnewlines', 'rm_nonmorph', 'filter_categories',
                    'filter_len', 'ppl_threshold', 'ppl_slope',
                    'length_threshold', 'length_slope', 'type_ppl',
                    'min_ppl_length', 'forcesplit', 'nosplit',
                    'annofiles', 'log_file',
                    'verbose', 'progress', 'help', 'version']
    override_defaults = {'trainmode': 'none'}

    for action_group in parser._action_groups:
        for arg in action_group._group_actions:
            if arg.dest not in keep_options:
                arg.help = argparse.SUPPRESS
            if arg.dest in override_defaults:
                arg.default = override_defaults[arg.dest]

    parser.add_argument('testfiles', metavar='<testfile>', nargs='+',
                        help='corpus files to segment')

    try:
        args = parser.parse_args(argv)
        cmd.flatcat_main(args)
    except ArgumentException as e:
        parser.error(e)
    except Exception as e:
        _logger.error("Fatal Error %s %s" % (type(e), e))
        raise


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