from server import app
from gunicorn.app.base import BaseApplication
import os


class GunicornApp(BaseApplication):
    def __init__(self, app, options=None):
        self.options = options or {}
        self.application = app
        super().__init__()

    def load_config(self):
        for key, value in self.options.items():
            if key in self.cfg.settings and value is not None:  # type: ignore
                self.cfg.set(key.lower(), value)  # type: ignore

    def load(self):
        return self.application


if __name__ == "__main__":
    workers = os.getenv("WORKERS")
    threads = os.getenv("THREADS")
    if workers is None:
        workers = 1
    if threads is None:
        threads = 2
    workers = int(workers)
    threads = int(threads)
    options = {
        "bind": "0.0.0.0:5000",
        "workers": workers,
        "threads": threads,
    }
    gunicorn_app = GunicornApp(app, options)
    print(
        "Starting server with "
        + str(workers)
        + " workers and "
        + str(threads)
        + " threads",
        flush=True,
    )
    gunicorn_app.run()
