import * as vscode from 'vscode';
import { beautifyCode, isSquirrelCode } from '../utils/beautifyHelper';

/**
 * 输入时格式化提供者类 - 使用 js-beautify.js
 */
export class OnTypeFormattingProvider implements vscode.OnTypeFormattingEditProvider {
    /**
     * 在用户输入特定字符时自动格式化代码
     */
    async provideOnTypeFormattingEdits(
        document: vscode.TextDocument,
        position: vscode.Position,
        ch: string,
        options: vscode.FormattingOptions,
        token: vscode.CancellationToken
    ): Promise<vscode.TextEdit[]> {
        const edits: vscode.TextEdit[] = [];

        try {
            // 获取文档全文
            const fullText = document.getText();

            // 检查是否是 Squirrel 代码
            if (!isSquirrelCode(fullText)) {
                return edits; // 如果不是 Squirrel 代码，不应用格式化
            }

            // 使用 js-beautify 格式化代码
            const formattedText = beautifyCode(fullText, options);

            // 如果格式化后的代码与原代码相同，不需要修改
            if (formattedText === fullText) {
                return edits;
            }

            // 创建编辑操作，替换整个文档
            const fullRange = new vscode.Range(
                document.positionAt(0),
                document.positionAt(fullText.length)
            );

            edits.push(vscode.TextEdit.replace(fullRange, formattedText));

        } catch (error) {
            console.error('输入时格式化失败:', error);
            // 如果格式化失败，返回空编辑数组，保持原代码不变
        }

        return edits;
    }
}