#!python

import sys
import asyncio
import importlib
from loguru import logger

COMMAND_MAP = {
    "build": "build_image",
    "deploy": "deploy_chute",
    "run": "run_chute",
    "report": "report_invocation",
    "register": "register",
    "api_key": "create_api_key",
}


async def main():
    """Run various commands."""
    args = sys.argv[1:]
    command = args[0] if args else None
    if (
        command
        and command not in COMMAND_MAP
        and command in ("chutes", "images", "api_keys")
    ):
        action = args[1] if len(args) > 1 else "list"
        if action in ("get", "list", "delete"):
            call_args = []
            call_kwargs = {}
            if action in ("get", "delete"):
                command = command.rstrip("s")
                call_args.append(args[2])
            else:
                if len(args) >= 2:
                    for arg in args[2:]:
                        if arg.startswith("--"):
                            parts = arg.split("=")
                            call_kwargs[parts[0][2:]] = parts[1]
            module = importlib.import_module("chutes.crud")
            await getattr(module, f"{action}_{command}")(*call_args, **call_kwargs)
            sys.exit(0)
        logger.error(f"Invalid action: {action}")
        sys.exit(1)
    if not args or args[0] not in COMMAND_MAP:
        logger.error(
            f"Please specify one of the supported commands: {', '.join(list(COMMAND_MAP))}"
        )
        sys.exit(1)
    module = importlib.import_module(f"chutes.entrypoint.{args[0]}")
    await getattr(module, COMMAND_MAP[args[0]])(args[1:])


if __name__ == "__main__":
    asyncio.run(main())
