#!python
import asyncio
import argparse

from messenger.manager import Manager
from messenger import BANNER

async def main(banner, manager):
    parser = argparse.ArgumentParser()
    parser.add_argument("-a", "--address", type=str, default="0.0.0.0",
                        help="IP address the server should listen on. Default is '0.0.0.0'.")
    parser.add_argument("-p", "--port", type=int, default=8080,
                        help="Port number the server should listen on. Default is 8080.")
    parser.add_argument("-s", "--ssl", nargs=2, metavar=('CERT', 'KEY'), default=None,
                        help="SSL certificate and key files. Expect two strings: path to the certificate and path to "
                             "the key.")
    parser.add_argument("-e", "--encryption-key", type=str, default=None, help="The AES encryption key.")
    parser.add_argument("-q", "--quiet", action="store_true", help="Suppress the banner.")
    args = parser.parse_args()
    if not args.quiet:
        print(banner)
    messenger_manager = manager(args.address, args.port, args.ssl, args.encryption_key)

    await messenger_manager.start_command_line_interface()

if __name__ == '__main__':
    try:
        asyncio.run(main(BANNER, Manager))
    except KeyboardInterrupt:
        print('\rMessenger Server stopped.')