import fs from 'fs';
import path from 'path';

/**
 * 确保文件具有执行权限 (Linux/macOS)
 * @param {string} filePath 文件绝对路径
 */
export function ensureExecutable(filePath) {
    if (process.platform === "win32") {
        // Windows 不需要 chmod，直接返回
        return;
    }
    try {
        if (!fs.existsSync(filePath)) {
             return;
        }
        const stats = fs.statSync(filePath);
        if (!(stats.mode & 0o111)) {
            fs.chmodSync(filePath, 0o755);
            console.log(`[binHelper] 已为文件 ${filePath} 添加执行权限`);
        }
    } catch (err) {
        console.error(`[binHelper] 无法设置执行权限: ${filePath}`, err.message);
    }
}

/**
 * 检查并准备二进制文件（检查存在性 + 赋予权限）
 * @param {string} binPath 二进制文件路径或命令
 * @returns {string|null} 如果是现有文件路径返回路径，如果是全局命令返回原命令，如果文件不存在返回 null
 */
export function prepareBinary(binPath) {
    if (!binPath) return null;
    
    // 如果不包含路径分隔符，假定是全局命令（如 'php', 'node'），直接返回
    // 注意：这里简单判断，如果用户写 ./php 或 /usr/bin/php 都会进入下面的 exist 检查
    if (!binPath.includes('/') && !binPath.includes('\\')) {
        return binPath;
    }

    // 如果是路径，检查是否存在
    if (fs.existsSync(binPath)) {
        ensureExecutable(binPath);
        return binPath;
    }
    
    // 路径不存在
    return null;
}
