#!/usr/bin/python3
# This file need for start ALTRepo API project.

import os
import sys
import multiprocessing
from gunicorn.app.wsgiapp import run

import altrepo_api
from altrepo_api.settings import namespace as settings

usage = f"""
Run ALTRepo API v{altrepo_api.__version__} standalone server.

API configuration file could be provided through command
line argument or using ALTREPO_API_CONFIG environment variable.

Default configuration file location is /etc/altrepo_api/api.conf.

Usage:
    altrepo-api [config_file_name]

-h, --help  Display this message
"""


if __name__ == '__main__':
    path = os.path.dirname(altrepo_api.__file__)

    # print usage
    if len(sys.argv) >= 2:
        if not os.path.isfile(sys.argv[1]):
            print(usage)
            os._exit(0)
        else:
            pass
    elif (os.getenv(settings.CONFIG_ENV_VAR) is None and
        not os.path.isfile(settings.CONFIG_FILE)):
        print("\n\033[91m* No ALTRepo API configuration file found *\033[0m\n")
        print(usage)
        os._exit(0)

    # import application and run
    from altrepo_api.app import app

    # set workers number as 2*CPU_CORES + 1 if not set in config
    if int(settings.WORKER_PROCESSES) <= 0:
        num_of_workers = str(multiprocessing.cpu_count()*2 + 1)
    else:
        num_of_workers = settings.WORKER_PROCESSES

    sys.argv = [
        sys.argv[0],
        "-b",
        "{}:{:d}".format(settings.DEFAULT_HOST, settings.DEFAULT_PORT),
        "-w",
        num_of_workers,
        "--chdir",
        path,
        "app:app",
        "--timeout",
        settings.WORKER_TIMEOUT,
    ]

    run()
