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

from tunnel_script.client import ServiceManagerClient
from tunnel_script.config import CONFIG_FILE
from tunnel_script.logger import setup_logger

logger = setup_logger("/var/log/replibit/tunnel-script.log")


def setup_port(config_file, server_id, tunnel_purpose, uuid=None):
    try:
        client = ServiceManagerClient(config_file, logger)
        return client.setup_tunnel_port(server_id, tunnel_purpose, uuid)
    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")
    parser.add_argument("--machine_uuid", default=None, help="The UUID of machine")
    args = parser.parse_args()

    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, args.machine_uuid)

    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)
