import psutil


def _进程名是否匹配(目标进程名: str | None, 输入进程名: str, 区分大小写: bool) -> bool:
    if not 目标进程名:
        return False
    if 区分大小写:
        return 目标进程名 == 输入进程名
    return 目标进程名.casefold() == 输入进程名.casefold()


def 进程名_终止进程(进程名: str, 区分大小写: bool = False) -> bool:
    """
    根据进程名称终止全部匹配的进程。

    功能说明：
        - 默认不区分大小写，例如 "QQ.exe"、"qq.exe"、"QQ.EXE" 都可匹配。
        - 当“区分大小写”为 True 时，会按原始大小写进行完全匹配。
        - 中文进程名会按原字符串正常比较，不会因大小写兼容逻辑报错。
        - 会先调用 terminate()，再等待进程退出。
        - 参数无效、未找到匹配进程或任一进程终止失败时，返回 False。

    Args:
        进程名 (str): 要终止的进程名称。
        区分大小写 (bool): 是否区分大小写，默认为 False。

    Returns:
        bool: 全部匹配进程终止成功返回 True；否则返回 False。
    """
    try:
        if not isinstance(进程名, str):
            return False

        进程名 = 进程名.strip()
        if not 进程名:
            return False

        进程列表 = [
            进程对象
            for 进程对象 in psutil.process_iter(['name'])
            if _进程名是否匹配(进程对象.info['name'], 进程名, 区分大小写)
        ]
        if not 进程列表:
            return False

        for 进程对象 in 进程列表:
            try:
                进程对象.terminate()
            except (psutil.NoSuchProcess, psutil.ZombieProcess):
                continue
            except Exception:
                return False

        存活进程列表 = psutil.wait_procs(进程列表, timeout=3)[1]
        return len(存活进程列表) == 0
    except Exception:
        return False
