#!/usr/bin/env python3

import logging
import sys

try:
    from flask_cors import CORS
    cors_supported = True
except ImportError:
    cors_supported = False

from fdbk.server import generate_app
from fdbk.utils import get_connection_argparser
from fdbk import __version__

def _generate_parser():
    parser = get_connection_argparser()
    parser.add_argument("--cors",
        help="allow cors requests",
        action="store_true")
    parser.add_argument("--host",
        help="hosts to serve to (default = 0.0.0.0)",
        default="0.0.0.0",
        type=str)
    parser.add_argument("--profile",
        help="run the server with python profiler",
        action="store_true")
    parser.add_argument("-p","--port",
        help="port to serve from (default = 8080)",
        default=8080,
        type=int)
    parser.add_argument("-v", "--version",
        help="Print package version",
        action="store_true")
    return parser

args = _generate_parser().parse_args()

if args.version:
    print(f"fdbk {__version__}")
    sys.exit()

if args.cors and not cors_supported:
    print("To enable CORS, install flask_cors.")
    sys.exit()

app = generate_app(db_plugin=args.db_connection, db_parameters=args.db_parameters, log_level=logging.INFO)

if args.cors and cors_supported:
    CORS(app)

if args.profile:
    from werkzeug.contrib.profiler import ProfilerMiddleware

    app.config['PROFILE'] = True
    app.wsgi_app = ProfilerMiddleware(app.wsgi_app, restrictions=[30])


app.run(use_reloader=True, host=args.host, port=args.port, threaded=True)
