/**
 * 变量删除辅助函数
 * 处理变量的整体删除逻辑
 */

const VARIABLE_PATTERN = /\$\{([^}]+)\}/g;

/**
 * 查找光标位置所在的变量范围
 * @param text 文本
 * @param cursorPos 光标位置
 * @returns 变量范围 { start, end } 或 null
 */
export const findVariableAtCursor = (
    text: string,
    cursorPos: number
): { start: number; end: number } | null => {
    // 重置正则表达式
    VARIABLE_PATTERN.lastIndex = 0;
    
    let match: RegExpExecArray | null;
    while ((match = VARIABLE_PATTERN.exec(text)) !== null) {
        const start = match.index;
        const end = start + match[0].length;
        
        // 检查光标是否在变量内部或紧邻变量边界
        if (cursorPos > start && cursorPos <= end) {
            return { start, end };
        }
    }
    
    return null;
};

/**
 * 处理 Backspace 键删除
 * @param text 文本
 * @param selectionStart 选区起始位置
 * @param selectionEnd 选区结束位置
 * @returns 新文本和新光标位置，或 null（使用默认行为）
 */
export const handleBackspaceDelete = (
    text: string,
    selectionStart: number,
    selectionEnd: number
): { newText: string; newCursorPos: number } | null => {
    // 如果有选区，使用默认行为
    if (selectionStart !== selectionEnd) {
        return null;
    }
    
    // 检查光标前一个字符是否是变量的结束符 '}'
    if (selectionStart > 0 && text[selectionStart - 1] === '}') {
        // 查找这个 '}' 对应的变量
        const variable = findVariableAtCursor(text, selectionStart);
        if (variable) {
            // 删除整个变量
            const newText = text.substring(0, variable.start) + text.substring(variable.end);
            return {
                newText,
                newCursorPos: variable.start
            };
        }
    }
    
    // 使用默认行为
    return null;
};

/**
 * 处理 Delete 键删除
 * @param text 文本
 * @param selectionStart 选区起始位置
 * @param selectionEnd 选区结束位置
 * @returns 新文本和新光标位置，或 null（使用默认行为）
 */
export const handleDeleteKey = (
    text: string,
    selectionStart: number,
    selectionEnd: number
): { newText: string; newCursorPos: number } | null => {
    // 如果有选区，使用默认行为
    if (selectionStart !== selectionEnd) {
        return null;
    }
    
    // 检查光标后一个字符是否是变量的开始符 '$'
    if (selectionStart < text.length && text[selectionStart] === '$' && text[selectionStart + 1] === '{') {
        // 查找这个变量
        const variable = findVariableAtCursor(text, selectionStart + 1);
        if (variable) {
            // 删除整个变量
            const newText = text.substring(0, variable.start) + text.substring(variable.end);
            return {
                newText,
                newCursorPos: variable.start
            };
        }
    }
    
    // 使用默认行为
    return null;
};

