#!/usr/bin/env python

import argparse
import os
from typing import Tuple
import zmq.auth

# @brief Creates a new keypair for ZMQ encryption
# @param[in] directory The location where to store the keys
# @return The public and private key tuple
def KeyPairCreator(directory: str, server: bool) -> Tuple[str, str]:
    if not server:
        print('Creating a new pair for a client...')
        target = 'client'
    else:
        print('Creating a new pair for the server...')
        target = 'server'

    public, private = zmq.auth.create_certificates(directory, target)
    return (public, private)

def str2bool(value):
    if isinstance(value, bool):
        return value
    elif value.lower() in ('yes', 'true', 't', 'y', '1'):
        return True
    elif value.lower() in ('no', 'false', 'f', 'n', '0'):
        return False
    else:
        raise argparse.ArgumentTypeError('Boolean value expected')

if __name__ == '__main__':
    # create the commandline parser
    parser = argparse.ArgumentParser(description='Create a new key-value pair')
    parser.add_argument('directory', help='Directory where to store the key pair')
    parser.add_argument('--server', default=False, action='store_true', help="Creates server key pair")
    args = parser.parse_args()

    # create the directory if it does not exist
    if not os.path.exists(args.directory):
        os.makedirs(args.directory)

    # create the keys
    KeyPairCreator(args.directory, args.server)
