import * as monaco from "monaco-editor-core"

export default <monaco.languages.CompletionItemProvider>{
    provideCompletionItems: (model, position) => {
        // 获取当前单词的范围
        const word = model.getWordUntilPosition(position);
        const range = {
            startLineNumber: position.lineNumber,
            endLineNumber: position.lineNumber,
            startColumn: word.startColumn,
            endColumn: word.endColumn
        };

        const suggestions: monaco.languages.CompletionItem[] = [
            {
                label: 'OPENQASM 2.0;',
                kind: monaco.languages.CompletionItemKind.Snippet,
                insertText: 'OPENQASM 2.0;',
                detail: 'OpenQASM版本声明',
                range: range
            },
            {
                label: 'include',
                kind: monaco.languages.CompletionItemKind.Keyword,
                insertText: 'include "${1:filename}";',
                insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet,
                detail: '引入文件',
                range: range
            },
            {
                label: 'qreg',
                kind: monaco.languages.CompletionItemKind.Keyword,
                insertText: 'qreg ${1:name}[${2:size}];',
                insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet,
                detail: '声明量子寄存器',
                range: range
            },
            {
                label: 'creg',
                kind: monaco.languages.CompletionItemKind.Keyword,
                insertText: 'creg ${1:name}[${2:size}];',
                insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet,
                detail: '声明经典寄存器',
                range: range
            }
        ];

        // 添加量子门操作补全
        const gates = [
            { label: 'h', detail: 'Hadamard门' },
            { label: 'x', detail: 'Pauli-X门' },
            { label: 'cx', insertText: 'cx ${1:control}, ${2:target};', detail: 'CNOT门' },
            // 添加更多量子门...
        ];

        for (const gate of gates) {
            const suggestion: monaco.languages.CompletionItem = {
                label: gate.label,
                kind: monaco.languages.CompletionItemKind.Function,
                detail: gate.detail,
                range: range,
                insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet,
                insertText: gate.insertText || gate.label + ' ${1:qubit};'
            };

            suggestions.push(suggestion);
        }

        return { suggestions: suggestions };
    }
}
