#!python
"""OpenGate client."""

import sys
import os
import argparse
import signal

sys.path.append("./")
os.environ["PYGAME_HIDE_SUPPORT_PROMPT"] = "1"

from Opengate.common.resources import ResourceManager
from Opengate.client.gameManagement import OpengateClient
# if not os.environ.get("OGRE_MIN_LOGLEVEL"):
#     os.environ["OGRE_MIN_LOGLEVEL"] = "0"


def trace(frame, event, arg):
    print(f"{event}, {frame.f_code.co_filename}:{frame.f_lineno}")
    return trace


def signal_handler(sig, frame):
    """Handle the Ctrl+C signal to shutdown the client."""
    print("You pressed Ctrl+C!")
    ResourceManager.game.shutdown()
    # sys.exit(0)


if __name__ == "__main__":
    signal.signal(signal.SIGINT, signal_handler)

    # Test the Game class
    ## show only warning and error messages

    parser = argparse.ArgumentParser(description="OpenGate client")

    # define some options (better import from defaultParser)
    parser.add_argument(
        "-v",
        "--verbose",
        dest="verbose",
        action="store_true",
        help="Be verbose",
    )
    parser.add_argument(
        "-H",
        "--host",
        dest="host",
        type=str,
        default="85.214.111.122",
        help="Host IP",
    )
    parser.add_argument(
        "-n",
        "--name",
        dest="name",
        type=str,
        default="",
        help="Player name to override saved settings (for testing)",
    )
    parser.add_argument(
        "-p",
        "--password",
        dest="password",
        type=str,
        default="",
        help="Player password to override saved settings (for testing)",
    )
    parser.add_argument(
        "-P", "--port", dest="port", type=int, default=4242, help="use port"
    )
    parser.add_argument(
        "-l", "--log", dest="log", type=int, default=3, help="log level"
    )
    parser.add_argument(
        "-d",
        "--debug",
        dest="debug",
        action="store_true",
        help="enable debug overlay",
    )
    parser.add_argument(
        "-t",
        "--trace",
        dest="trace",
        action="store_true",
        help="enable trace overlay",
    )

    args = parser.parse_args()

    if args.trace:
        sys.settrace(trace)

    if not os.environ.get("OGRE_MIN_LOGLEVEL"):
        os.environ["OGRE_MIN_LOGLEVEL"] = f"{args.log}"

    game = OpengateClient(args=args)

    game.start(
        server=(args.host, args.port),
        userName=args.name,
        password=args.password,
    )
