/* Natively implemented in Java
 * These functions are treated as if
 * they were defined in the global scope.
 * These do not need to be imported
 */

/* BuiltInExtension */
/*
 * This is used to get the version of Arucas that is currently running
 * Returns - String: the version of Arucas that is currently running
 */
fun getArucasVersion();

/*
 * This is used to get the current time in milliseconds
 * Returns - Number: the current time in milliseconds
 */
fun getMilliTime();

/*
 * This is used to enable or disable debug mode
 * Parameter - Boolean (bool): true to enable debug mode, false to disable debug mode
 */
fun debug(bool);

/*
 * This is used to evaluate a string as a script
 * Parameter - String (string): the string to evaluate
 * Returns - Value: the return value of the script
 */
fun runFromString(string);

/*
 * This is used to get the current time in nanoseconds
 * Returns - Number: the current time in nanoseconds
 */
fun getNanoTime();

/*
 * This is used to get the current time formatted with HH:mm:ss in your local time
 * Returns - String: the current time formatted with HH:mm:ss
 */
fun getTime();

/*
 * This is used to check whether the script is the main script
 * Returns - Boolean: true if the script is the main script, false if it is not
 */
fun isMain();

/*
 * Deprecated: You should use the `throw` keyword
 * This is used to throw a runtime error
 * Parameter - String (message): the message of the error
 * Throws - Error: the error with the message
 */
fun throwRuntimeError(message);

/*
 * This is used to generate a range of integers starting from 0
 * Parameter - Number (bound): the maximum bound (exclusive)
 * Returns - Iterator: an iterator that returns the range of integers
 */
fun range(bound);

/*
 * This is used to generate a range of numbers starting
 * from a start value and ending at a bound value going up by 1
 * Parameter - Number (start): the start value
 * Parameter - Number (bound): the maximum bound (exclusive)
 * Returns - Iterator: an iterator that returns the range of numbers
 */
fun range(start, bound);

/*
 * This is used to generate a range of numbers starting
 * from a start value and ending at a bound value going up by a step value
 * Parameter - Number (start): the start value
 * Parameter - Number (bound): the maximum bound (exclusive)
 * Parameter - Number (step): the step value
 * Returns - Iterator: an iterator that returns the range of numbers
 */
fun range(start, bound, step);

/*
 * This is used to enable or disable experimental mode
 * Parameter - Boolean (bool): true to enable experimental mode, false to disable experimental mode
 */
fun experimental(bool);

/*
 * This is used to run a .arucas file, you can use on script to run other scripts
 * Parameter - String (path): as a file path
 * Returns - Value: any value that the file returns
 * Throws - Error: Failed to execute script...
 */
fun run(path);

/*
 * This is used to get the current time in seconds since the Unix epoch
 * Returns - Number: the current time in seconds since the Unix epoch
 */
fun getUnixTime();

/*
 * This pauses your program for a certain amount of milliseconds
 * Parameter - Number (milliseconds): milliseconds to sleep
 */
fun sleep(milliseconds);

/*
 * This is used to generate a random integer between 0 and the bound
 * Parameter - Number (bound): the maximum bound (exclusive)
 * Returns - Number: the random integer
 */
fun random(bound);

/*
 * This is used to take an input from the user
 * Parameter - String (prompt): the prompt to show the user
 * Returns - String: the input from the user
 */
fun input(prompt);

/*
 * This prints a number of values to the console
 * Parameter - Value (printValue...): the value to print
 */
fun print(printValue...);

/*
 * This prints a value to the console
 * Parameter - Value (printValue): the value to print
 */
fun print(printValue);

/*
 * This is used to get the length of a collection or string
 * Parameter - String (collection): the collection or string
 * Throws - Error: Cannot pass ... into len()
 */
fun len(collection);

/*
 * This is used to stop a script
 */
fun stop();

/*
 * Deprecated: You should use Function class `Function.callWithList(fun() {}, [])`
 * This is used to call a function with a list of arguments
 * Parameter - Function (function): the function
 * Parameter - List (list): the list of arguments
 * Returns - Value: the return value of the function
 */
fun callFunctionWithList(function, list);

/*
 * This is used to enable or disable suppressing deprecation warnings
 * Parameter - Boolean (bool): true to enable suppressing deprecation warnings, false to disable suppressing deprecation warnings
 */
fun suppressDeprecated(bool);

/*
 * This is used to get the current date formatted with dd/MM/yyyy in your local time
 * Returns - String: the current date formatted with dd/MM/yyyy
 */
fun getDate();

/* MinecraftExtension */
fun runThreaded(arg1, arg2);

/*
 * Deprecated: Use 'MinecraftClient.getClient()'
 * This gets the MinecraftClient instance
 * Returns - MinecraftClient: The MinecraftClient instance
 */
fun getMinecraftClient();

/*
 * This freezes the current thread and halts execution, same functionality as 'Thread.freeze()'
 */
fun hold();


