#!/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-train'
    parser.epilog = """
Simple usage example (load a Baseline model, perform FlatCat training
                      and save it into files):

  %(prog)s baseline_segmentation.txt -p 10 -s analysis.tar.gz

"""
    keep_options = ['initfile', 'extendfiles',
                    'savetarballfile', 'savereduced', 'saveanalysisfile',
                    'saveannotsfile', 'savepicklefile', 'loadparamsfile',
                    'saveparamsfile', 'lexfile', 'trainmode',
                    'encoding', 'cseparator', 'consseparator',
                    'analysisseparator', 'catseparator',
                    'dampening', 'ppl_threshold', 'ppl_slope',
                    'pre_ppl_threshold',
                    'length_threshold', 'length_slope', 'type_ppl',
                    'min_ppl_length', 'forcesplit', 'nosplit',
                    'skips', 'freqthreshold', 'max_shift_distance',
                    'min_shift_remainder', 'max_epochs',
                    'max_iterations_first', 'max_iterations',
                    'max_resegment_iterations', 'min_epoch_cost_gain',
                    'min_iteration_cost_gain', 'min_diff_prop',
                    'training_operations', 'epochinterval',
                    'annofiles', 'corpusweight', 'annotationweight',
                    'stats_file', 'statsannotfile', 'log_file'
                    'ml_emissions_epoch',
                    'verbose', 'progress', 'help', 'version']

    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

    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:])
