import ast
import sys
from typing import Any


def parse_cli_args() -> dict[str, Any]:
    """解析命令行参数为 Python 对象

    自动识别参数值为 Python 表达式，支持：
    - 基本类型：--lr=0.01, --epochs=100, --debug=True
    - 复杂类型：--layers=[64,128,256], --config={'lr':0.01}
    - 字符串：--name=model1 或 --path="path with spaces"
    - 布尔标志：--verbose (True), --no-verbose (False)

    Returns
    ----------
    - `dict[str, Any]`
        - 解析后的参数字典

    Examples
    ----------
    ```bash
    python script.py --lr=0.01 --epochs=100 --layers=[64,128,256] --config={"batch_size":32}
    ```
    """

    def _parse_value(value: str) -> Any:
        """智能解析参数值为 Python 对象"""
        # 尝试作为 Python 表达式解析
        try:
            return ast.literal_eval(value)
        except (ValueError, SyntaxError):
            # 如果不是有效的 Python 表达式，就当作字符串
            return value

    args = {}

    # 直接处理 sys.argv，不使用 shlex（避免JSON解析问题）
    for arg in sys.argv[1:]:
        if '=' in arg:
            # 键值对格式：--key=value
            key, value = arg.split('=', 1)
            if key.startswith('--'):
                key = key[2:]
            args[key] = _parse_value(value)

        elif arg.startswith('--no-'):
            # 负布尔标志：--no-flag
            key = arg[5:]  # 移除 --no-
            args[key] = False

        elif arg.startswith('--'):
            # 正布尔标志：--flag
            key = arg[2:]  # 移除 --
            args[key] = True

    return args
