from .classes.bot import GPTBot

from argparse import ArgumentParser
from configparser import ConfigParser

import signal
import asyncio


def sigterm_handler(_signo, _stack_frame):
    exit()


if __name__ == "__main__":
    # Parse command line arguments
    parser = ArgumentParser()
    parser.add_argument(
        "--config",
        "-c",
        help="Path to config file (default: config.ini in working directory)",
        default="config.ini",
    )
    parser.add_argument(
        "--version",
        "-v",
        help="Print version and exit",
        action="version",
        version="GPTBot v0.1.1",
    )
    args = parser.parse_args()

    # Read config file
    config = ConfigParser()
    config.read(args.config)

    # Create bot
    bot = GPTBot.from_config(config)

    # Listen for SIGTERM
    signal.signal(signal.SIGTERM, sigterm_handler)

    # Start bot
    try:
        asyncio.run(bot.run())
    except KeyboardInterrupt:
        print("Received KeyboardInterrupt - exiting...")
    except SystemExit:
        print("Received SIGTERM - exiting...")
