#! /usr/bin/env python
# -*- coding: utf-8 -*-

import argparse
import importlib
import logging
import os
import sys

from scotchwsgi.server import make_server

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument('app_package', help="module with WSGI application 'app' variable defined")
parser.add_argument('--host', default='localhost', help="server hostname")
parser.add_argument('--port', default=8080, help="server port number", type=int)
parser.add_argument('--certfile', help="SSL public key certificate file")
parser.add_argument('--keyfile', help="SSL private key file")
parser.add_argument('--ca_certs', help="SSL CA certificate chain file")
parser.add_argument('--backlog', help="Max number of queued connections", type=int, default=100)
parser.add_argument('--num_workers', help="Number of worker processes", type=int, default=4)
args = parser.parse_args()

sys.path.append(os.getcwd())
app_package = importlib.import_module(args.app_package)
if not hasattr(app_package, 'app'):
    logger.error("'app' not found in {}".format(args.app_package))
    sys.exit(1)

if args.certfile:
    ssl_config = {
        'certfile': args.certfile,
        'keyfile': args.keyfile,
        'ca_certs': args.ca_certs,
    }
else:
    ssl_config = None

server = make_server(
    args.host,
    args.port,
    app_package.app,
    ssl_config=ssl_config,
    backlog=args.backlog,
    num_workers=args.num_workers,
)
server.start()
