#!python
"""bin/iceman entrypoint
"""
import argparse
import importlib
import sys

import iceman #pylint: disable=import-self
from iceman.configuration import Configuration
from iceman.interceptor import Interceptor

def intercept(args):
    """loads configuration, initializes the encryption cipher,
    and starts the packet handler
    """
    config = Configuration()
    config.cipher_suite = config.initialize_cipher_suite(args.crypto_strategy)

    traffic = traffic_class(args.traffic)(args.protocol,
                                          int(args.queue),
                                          config.cipher_suite,
                                          config.encryption_enabled)
    Interceptor.intercept(traffic)


def traffic_class(traffic):
    """gets the traffic (egress/ingress) class
    """
    module_name = traffic
    klass = module_name.capitalize()
    module = importlib.import_module("iceman.traffic.{}".format(module_name))
    return getattr(module, klass)


def main():
    """main entrypoint
    """

    parser = argparse.ArgumentParser()
    parser.add_argument('-v',
                        '--version',
                        action='version',
                        version=iceman.__version__)

    subparsers = parser.add_subparsers(help='commands')

    intercept_parser = subparsers.add_parser('intercept')
    intercept_parser.add_argument('-p',
                                  '--protocol',
                                  choices=Configuration.PROTOCOLS)
    intercept_parser.add_argument('-s',
                                  '--crypto-strategy',
                                  choices=Configuration.CRYPTO_STRATEGIES,
                                  default='fernet')
    intercept_parser.add_argument('-t',
                                  '--traffic',
                                  choices=Configuration.QUEUES)
    intercept_parser.add_argument('-q', '--queue', required=True)
    intercept_parser.set_defaults(func=intercept)

    args = parser.parse_args()
    args.func(args)


if __name__ == "__main__":
    sys.exit(main())
