from datetime import datetime
import psutil


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


def 进程名_获取首个运行时间(进程名: str, 区分大小写: bool = False) -> str:
    """
    获取指定名称进程中最早启动的运行时间。

    功能说明：
        - 默认不区分大小写，例如 "QQ.exe"、"qq.exe"、"QQ.EXE" 都可匹配。
        - 当“区分大小写”为 True 时，会按原始大小写进行完全匹配。
        - 中文进程名会按原字符串正常比较，不会因大小写兼容逻辑报错。
        - 当存在多个同名进程时，会返回其中最早启动的那个时间。
        - 返回时间格式固定为 "YYYY-MM-DD HH:MM:SS"。
        - 参数无效、未找到匹配进程或发生异常时，返回空字符串。

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

    Returns:
        str: 成功返回最早启动时间；失败返回空字符串。
    """
    try:
        if not isinstance(进程名, str):
            return ''

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

        启动时间列表: list[float] = []
        for 进程对象 in psutil.process_iter(['name']):
            if not _进程名是否匹配(进程对象.info['name'], 进程名, 区分大小写):
                continue
            try:
                启动时间列表.append(float(进程对象.create_time()))
            except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
                continue

        if not 启动时间列表:
            return ''
        return datetime.fromtimestamp(min(启动时间列表)).strftime('%Y-%m-%d %H:%M:%S')
    except Exception:
        return ''
