<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>balls</title>
    <style>
        body {
            margin: 0;
            padding: 0;
            overflow: hidden;
            font-family: sans-serif;
        }
        #container {
            width: 100vw;
            height: 100vh;
        }
        #hiddenInput {
            display: none;
        }
    </style>
</head>
<body>
    <div id="container"></div>
    <input type="hidden" id="hiddenInput" value="">
    <script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.28.1/min/vs/loader.min.js"></script>
    <script>
        require.config({ paths: { 'vs': 'https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.28.1/min/vs' }});
        require(['vs/editor/editor.main'], function() {
            // Define the Roblox Studio theme
            monaco.editor.defineTheme('robloxStudioTheme', {
                base: 'vs-dark',
                inherit: true,
                rules: [
                    { token: 'keyword', foreground: '#f96e7d' }, // Blue
                    { token: 'string', foreground: '#a4dd8f' }, // Light brown
                    { token: 'number', foreground: '#ffc700' }, // yellow
                    { token: 'comment', foreground: '6A9955' }, // Green
                    { token: 'type', foreground: '4EC9B0' }, // Light blue
                    { token: 'function', foreground: 'DCDCAA' }, // Light yellow
                    { token: 'variable', foreground: '9CDCFE' }, // Light blue
                    { token: 'constant', foreground: '569CD6' }, // Blue
                    { token: 'operator', foreground: 'D4D4D4' }, // White
                    { token: 'delimiter', foreground: 'D4D4D4' }, // White
                    { token: 'identifier', foreground: '9CDCFE' } // Light blue
                ],
                colors: {
                    'editor.background': '#101010', // Dark background
                    'editor.foreground': '#D4D4D4'  // Default text color
                }
            });
            // Apply the custom theme
            monaco.editor.setTheme('robloxStudioTheme');

            // Create the editor
            const editor = monaco.editor.create(document.getElementById('container'), {
                value: [
                    'print("Hello, world!")',
                ].join('\n'),
                language: 'lua',
                automaticLayout: true,
                minimap: { enabled: false }, // Disable minimap for better performance
                scrollbar: {
                    useShadows: false,
                    vertical: 'visible',
                    horizontal: 'visible',
                    verticalScrollbarSize: 17,
                    horizontalScrollbarSize: 17
                },
                quickSuggestions: {
                    other: true,
                    comments: true,
                    strings: true
                },
                wordBasedSuggestions: true,
                snippetSuggestions: 'top',
                wordWrap: 'on', // Enable word wrap
                lineNumbers: 'on', // Show line numbers
                theme: 'robloxStudioTheme'
            });

            // Add additional functions
            window.getValue = function() {
                return editor.getValue();
            };

            window.setValue = function(value) {
                editor.setValue(value);
            };

            window.transferValueToHiddenInput = function() {
                var value = getValue();
                console.log("Editor value:", value);
                document.getElementById('hiddenInput').value = value;
                console.log("Hidden input value:", document.getElementById('hiddenInput').value);
            };

            window.clearEditor = function() {
                editor.setValue("");           
            };

            window.startuptext = function() {
                editor.setValue("--Made-by-monster--");           
            };

            window.obfuscateCode = function() {
                var code = getValue();
                var obfuscatedCode = code.split('').map(function(c) {
                    return '\\' + c.charCodeAt(0).toString(10);
                }).join('');
                setValue(obfuscatedCode);
            };

            window.deobfuscateCode = function() {
                var code = getValue();
                var deobfuscatedCode = code.split('\\').filter(Boolean).map(function(c) {
                    return String.fromCharCode(parseInt(c, 10));
                }).join('');
                setValue(deobfuscatedCode);
            };

            // Register a completion item provider for Lua
            monaco.languages.registerCompletionItemProvider('lua', {
                provideCompletionItems: function(model, position) {
                    const textUntilPosition = model.getValueInRange({
                        startLineNumber: 1,
                        startColumn: 1,
                        endLineNumber: position.lineNumber,
                        endColumn: position.column
                    });

                    // Extensive suggestions for Lua
const suggestions = [
    { label: 'print', kind: monaco.languages.CompletionItemKind.Function, insertText: 'print(${1:text})', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Prints text to the console.' },
    { label: 'function', kind: monaco.languages.CompletionItemKind.Keyword, insertText: 'function ${1:name}(${2:parameters})\n\t${3:-- body}\nend', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Defines a function.' },
    { label: 'local', kind: monaco.languages.CompletionItemKind.Keyword, insertText: 'local ${1:name} = ${2:value}', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Defines a local variable.' },
    { label: 'if', kind: monaco.languages.CompletionItemKind.Keyword, insertText: 'if ${1:condition} then\n\t${2:-- body}\nend', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'If statement.' },
    { label: 'for', kind: monaco.languages.CompletionItemKind.Keyword, insertText: 'for ${1:i} = ${2:1}, ${3:max}, ${4:step} do\n\t${5:-- body}\nend', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'For loop.' },
    { label: 'while', kind: monaco.languages.CompletionItemKind.Keyword, insertText: 'while ${1:condition} do\n\t${2:-- body}\nend', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'While loop.' },
    { label: 'repeat', kind: monaco.languages.CompletionItemKind.Keyword, insertText: 'repeat\n\t${1:-- body}\nuntil ${2:condition}', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Repeat until loop.' },
    { label: 'true', kind: monaco.languages.CompletionItemKind.Keyword, insertText: 'true', documentation: 'Boolean true value.' },
    { label: 'false', kind: monaco.languages.CompletionItemKind.Keyword, insertText: 'false', documentation: 'Boolean false value.' },
    { label: 'table', kind: monaco.languages.CompletionItemKind.Class, insertText: 'table', documentation: 'Table library.' },
    { label: 'math', kind: monaco.languages.CompletionItemKind.Class, insertText: 'math', documentation: 'Math library.' },
    { label: 'string', kind: monaco.languages.CompletionItemKind.Class, insertText: 'string', documentation: 'String library.' },
    { label: 'io', kind: monaco.languages.CompletionItemKind.Class, insertText: 'io', documentation: 'IO library.' },
    { label: 'os', kind: monaco.languages.CompletionItemKind.Class, insertText: 'os', documentation: 'OS library.' },
    { label: 'coroutine', kind: monaco.languages.CompletionItemKind.Class, insertText: 'coroutine', documentation: 'Coroutine library.' },
    { label: 'debug', kind: monaco.languages.CompletionItemKind.Class, insertText: 'debug', documentation: 'Debug library.' },
    { label: 'require', kind: monaco.languages.CompletionItemKind.Function, insertText: 'require(${1:module})', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Loads the given module.' },
    { label: 'dofile', kind: monaco.languages.CompletionItemKind.Function, insertText: 'dofile(${1:filename})', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Executes the contents of the given file.' },
    { label: 'loadfile', kind: monaco.languages.CompletionItemKind.Function, insertText: 'loadfile(${1:filename})', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Loads the contents of the given file.' },
    { label: 'loadstring', kind: monaco.languages.CompletionItemKind.Function, insertText: 'loadstring(${1:string})', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Loads the given string as code.' },
    { label: 'pairs', kind: monaco.languages.CompletionItemKind.Function, insertText: 'pairs(${1:table})', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Returns an iterator function.' },
    { label: 'ipairs', kind: monaco.languages.CompletionItemKind.Function, insertText: 'ipairs(${1:table})', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Returns an iterator function.' },
    { label: 'next', kind: monaco.languages.CompletionItemKind.Function, insertText: 'next(${1:table}, ${2:index})', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Returns the next index in the table.' },
    { label: 'tonumber', kind: monaco.languages.CompletionItemKind.Function, insertText: 'tonumber(${1:value})', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Converts the value to a number.' },
    { label: 'tostring', kind: monaco.languages.CompletionItemKind.Function, insertText: 'tostring(${1:value})', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Converts the value to a string.' },
    { label: 'type', kind: monaco.languages.CompletionItemKind.Function, insertText: 'type(${1:value})', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Returns the type of the value.' },
    { label: 'Vector3', kind: monaco.languages.CompletionItemKind.Class, insertText: 'Vector3.new(${1:x}, ${2:y}, ${3:z})', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Creates a new Vector3.' },
    { label: 'Instance', kind: monaco.languages.CompletionItemKind.Class, insertText: 'Instance.new(${1:className})', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Creates a new Roblox instance.' },
    { label: 'wait', kind: monaco.languages.CompletionItemKind.Function, insertText: 'wait(${1:seconds})', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Pauses the script for a certain number of seconds.' },
    { label: 'game', kind: monaco.languages.CompletionItemKind.Class, insertText: 'game', documentation: 'Root object of the Roblox hierarchy.' },
    { label: 'workspace', kind: monaco.languages.CompletionItemKind.Class, insertText: 'workspace', documentation: 'The 3D space containing all physical objects in the game.' },
    { label: 'nil', kind: monaco.languages.CompletionItemKind.Keyword, insertText: 'nil', documentation: 'Represents the absence of a value.' },
    { label: 'script', kind: monaco.languages.CompletionItemKind.Variable, insertText: 'script', documentation: 'Refers to the script object itself.' },
    { label: 'Enum', kind: monaco.languages.CompletionItemKind.Module, insertText: 'Enum.${1:EnumType}', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Access Roblox enumerations.' },
    { label: 'FindFirstChild', kind: monaco.languages.CompletionItemKind.Function, insertText: ':FindFirstChild("${1:ChildName}")', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Finds the first child of an instance with the given name.' },
    { label: 'GetChildren', kind: monaco.languages.CompletionItemKind.Function, insertText: ':GetChildren()', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Returns a table containing all the children of an instance.' },
    { label: 'CFrame', kind: monaco.languages.CompletionItemKind.Class, insertText: 'CFrame.new(${1:x}, ${2:y}, ${3:z})', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Creates a new CFrame at the specified position.' },
    { label: 'Color3', kind: monaco.languages.CompletionItemKind.Class, insertText: 'Color3.new(${1:r}, ${2:g}, ${3:b})', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Creates a new Color3 value.' },
    { label: 'UDim2', kind: monaco.languages.CompletionItemKind.Class, insertText: 'UDim2.new(${1:scaleX}, ${2:offsetX}, ${3:scaleY}, ${4:offsetY})', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Creates a new UDim2 value.' },
    { label: 'task.wait', kind: monaco.languages.CompletionItemKind.Function, insertText: 'task.wait(${1:time})', insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Pauses the current thread for the specified amount of time.' }
];

return { suggestions: suggestions };

                }
            });
        });
    </script>
</body>
</html>
