import logging
import traceback
import argparse
import importlib
from .env import Env
from .server import Server


def get_argument_parser():
    parser = argparse.ArgumentParser(
        prog="torba-server"
    )
    parser.add_argument("spvserver", type=str, help="Python class path to SPV server implementation.")
    return parser


def get_coin_class(spvserver):
    spvserver_path, coin_class_name = spvserver.rsplit('.', 1)
    spvserver_module = importlib.import_module(spvserver_path)
    return getattr(spvserver_module, coin_class_name)


def main():
    parser = get_argument_parser()
    args = parser.parse_args()
    coin_class = get_coin_class(args.spvserver)
    logging.basicConfig(level=logging.INFO)
    logging.info('torba.server starting')
    try:
        server = Server(Env(coin_class))
        server.run()
    except Exception:
        traceback.print_exc()
        logging.critical('torba.server terminated abnormally')
    else:
        logging.info('torba.server terminated normally')


if __name__ == "__main__":
    main()