#!/usr/bin/env python3
import os
import sys
import logging
import argparse
from importlib.metadata import version

import bottle
from socketserver import ThreadingMixIn
from wsgiref.simple_server import WSGIServer, WSGIRequestHandler

from ssapi.env import get_env_database
from ssapi.defaults import (
    DEFAULT_SSAPI_WEB_LISTEN_PORT,
    DEFAULT_AUTH_SECRET_ENV_VAR
)


def print_db_path() -> None:
    print(f"Using database at: {get_env_database().name}", file=sys.stderr)


def main():
    import ssapi.web  # Required to activate the routes

    parser = argparse.ArgumentParser()
    parser.add_argument(
        "-v",
        dest="is_verbose",
        action="store_true",
        default=False,
    )
    args = parser.parse_args()
    if args.is_verbose:
        logging.basicConfig(level=logging.DEBUG)
        logging.debug("Debug mode is on")

    if not os.getenv(DEFAULT_AUTH_SECRET_ENV_VAR):
        logging.warning(
            "No authentication secret set. "
            "Set it using the environment variable: %s",
            DEFAULT_AUTH_SECRET_ENV_VAR,
        )

    print(
        f"ssapi v{version('ssapi')} starting up...",
    )
    class ThreadingWSGIRefServer(bottle.ServerAdapter):
        def run(self, handler):
            class ThreadingWSGIServer(ThreadingMixIn, WSGIServer):
                daemon_threads = True
            server = ThreadingWSGIServer(
                (self.host, self.port), WSGIRequestHandler
            )
            server.set_app(handler)
            server.serve_forever()

    bottle.run(
        host="localhost",
        port=DEFAULT_SSAPI_WEB_LISTEN_PORT,
        debug=True,
        server=ThreadingWSGIRefServer,
    )


if __name__ == "__main__":
    main()
