#!/usr/bin/env python
'''script for ipktgen'''

from __future__ import print_function
import os
import datetime
import logging
import argparse
from genpackets import Genpackets

LOGGER = logging.getLogger()
LOGGER.setLevel(logging.DEBUG)

def parse_args():
    '''parse args for ipktgen'''
    parser = argparse.ArgumentParser()
    parser.add_argument("-a", "--appmodel", required=True,
                        help="specify app model file")
    parser.add_argument("-u", "--usersessions", required=True,
                        help="specify net model file")
    grp = parser.add_mutually_exclusive_group(required=True)
    grp.add_argument("-c", "--client", action="store_true")
    grp.add_argument("-s", "--server", action="store_false")
    parser.add_argument("-v", "--verbose", action="store_true")
    parser.add_argument('-o', '--outdir', default=os.getcwd(),
                        help='specify output directory to save logs')
    parser.add_argument('-m', '--modeltype', dest='modeltype',
                        default='Generic', choices=['Generic', 'Generic1a',
                                                    'Generic1', 'Type1',
                                                    'Type2', 'Type3',
                                                    'Type4' ],
                        help='specify type of model to create')
    return parser.parse_args()

def setup_logging(verbose, outdir, client):
    '''setup logging for the entire app'''
    # create file handler which logs even debug messages
    if not os.path.exists(outdir):
        os.makedirs(outdir)
    tt = 'client' if client else 'server'
    mytime = str(datetime.datetime.now()).replace(' ', '_')
    logfilename = outdir + '/ipktgen-' + tt + '.log'
    f_handler = logging.FileHandler(logfilename)
    f_handler.setLevel(logging.DEBUG)
    # create console handler with a higher log level
    c_handler = logging.StreamHandler()
    c_handler.setLevel(logging.INFO)
    if verbose:
        c_handler.setLevel(logging.DEBUG)
    # create formatter and add it to the handlers
    formatter = logging.Formatter('%(asctime)s - %(levelname)s - '\
                '%(name)s - %(message)s')
    f_handler.setFormatter(formatter)
    c_handler.setFormatter(formatter)
    # add the handlers to the logger
    LOGGER.addHandler(f_handler)
    LOGGER.addHandler(c_handler)
    print('logging to file: {}, log level: {}'.format(logfilename, 
                                                      f_handler.level))

if __name__ == '__main__':
    args = parse_args()
    setup_logging(args.verbose, args.outdir, args.client)
    generator = Genpackets(args.appmodel, args.usersessions, args.client,
                           args.outdir, args.modeltype)
    generator.generate()
