#!/usr/bin/python3
import argparse
import logging
import sys

from tunnel_script.client import ServiceManagerClient

CONFIG_FILE = "/etc/replibit/tunnel-script.conf"
LOG_FILE = "/var/log/replibit/tunnel-script.log"

logger = logging.getLogger()


def setup_logger(log_file):
    logger.setLevel(logging.INFO)
    handler = logging.FileHandler(log_file)
    handler.setFormatter(logging.Formatter('%(asctime)s [%(levelname)s] %(message)s'))
    logger.addHandler(handler)


def setup_port(config_file, server_id, tunnel_purpose):
    try:
        client = ServiceManagerClient(config_file, logger)
        return client.setup_tunnel_port(server_id, tunnel_purpose)
    except Exception:
        logger.exception("Unable to setup {} tunnel port for server {}".format(tunnel_purpose, server_id))
        return None


if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="DTS port setup utility")
    parser.add_argument("server_id", help="Server ID")
    parser.add_argument("tunnel_purpose", help="The purpose of communication channel")
    args = parser.parse_args()

    setup_logger(LOG_FILE)

    logger.info("Allocating {} tunnel port for server {}".format(args.tunnel_purpose, args.server_id))
    port = setup_port(CONFIG_FILE, args.server_id, args.tunnel_purpose)

    if port is None:
        msg = "Unable to allocate {} tunnel port for server {}".format(args.tunnel_purpose, args.server_id)
        print(msg, file=sys.stderr)
        logger.error(msg)
        sys.exit(1)

    logger.info("Allocated {} tunnel port {} for server {}".format(args.tunnel_purpose, port, args.server_id))
    print(port)

    sys.exit(0)
