# 工具函数
from __future__ import annotations

import os
import subprocess

from lib.core.VLogger import get_logger as _vlog


def DetectFileType(FilePath: str) -> str:
    """检测文件类型"""
    _: str
    ext: str
    _, ext = os.path.splitext(FilePath)
    return ext.lower()


def ExecuteCommand(command: list[str], shell: bool = False, CaptureOutput: bool = True, text: bool = True) -> subprocess.CompletedProcess[str] | None:
    """执行命令
    command 应该是列表形式（如 ['gcc', 'file.c', '-o', 'file.exe']）
    避免字符串拼接以防止 shell 注入"""
    try:
        result: subprocess.CompletedProcess[str] = subprocess.run(
            command,
            shell=shell,
            check=True,
            capture_output=CaptureOutput,
            text=text
        )
        return result
    except subprocess.CalledProcessError as e:
        _vlog().error(f'编译失败: {e}')
        if e.stderr:
            _vlog().error(f'错误输出: {e.stderr}')
        return None


def AppendFileContent(FilePath: str, content: str) -> bool:
    """追加文件内容"""
    try:
        with open(FilePath, 'a', encoding='utf-8') as f:
            f.write(content)
            f.write('\n')
        return True
    except Exception as e:
        _vlog().error(f'写入文件失败 {FilePath}: {e}')
        return False
