"""s3c CLI 入口点

命令格式: s3c [-c <cluster>] <resource> <action> [options]

全局参数 -c/--cluster 通过预处理 sys.argv 解析，
然后将剩余参数交给 fire.Fire() 处理。
"""
import sys
import fire

from . import client as client_module
from .clusters import Clusters
from .bucket import Bucket
from .object import Object


def _extract_cluster(argv: list[str]) -> tuple[str | None, list[str]]:
    """从 argv 中提取 -c/--cluster 参数

    Args:
        argv: 原始命令行参数列表（不含程序名）

    Returns:
        (cluster_name, remaining_argv) 元组
    """
    cluster_name = None
    remaining = []
    i = 0
    while i < len(argv):
        arg = argv[i]
        if arg in ("-c", "--cluster"):
            if i + 1 < len(argv):
                cluster_name = argv[i + 1]
                i += 2
            else:
                print("[错误] -c/--cluster 参数需要指定集群名称")
                raise SystemExit(1)
        elif arg.startswith("--cluster="):
            cluster_name = arg.split("=", 1)[1]
            i += 1
        else:
            remaining.append(arg)
            i += 1

    return cluster_name, remaining


def main() -> None:
    """s3c CLI 主入口"""
    # 提取全局参数 -c/--cluster
    argv = sys.argv[1:]
    cluster_name, remaining_argv = _extract_cluster(argv)

    # 设置当前集群（不立即加载，等命令执行时再加载，避免 clusters list 时报错）
    client_module.set_cluster(cluster_name)

    # 构建命令路由表
    components = {
        "clusters": Clusters(),
        "bucket": Bucket(),
        "object": Object(),
    }

    # 将剩余参数交给 fire 处理
    sys.argv = [sys.argv[0]] + remaining_argv
    fire.Fire(components)


if __name__ == "__main__":
    main()
