import contextlib
import logging
from os import getpid

from classes.pyroclient import PyroClient
from modules.scheduler import scheduler

logging.basicConfig(
    level=logging.INFO,
    format="%(name)s.%(funcName)s | %(levelname)s | %(message)s",
    datefmt="[%X]",
)

logger = logging.getLogger(__name__)

with contextlib.suppress(ImportError):
    import uvloop

    uvloop.install()


def main():
    client = PyroClient(scheduler=scheduler)

    try:
        client.run()
    except KeyboardInterrupt:
        logger.warning("Forcefully shutting down with PID %s...", getpid())
    finally:
        if client.scheduler is not None:
            client.scheduler.shutdown()
        exit()


if __name__ == "__main__":
    main()
