import { Unregisterable } from './shared';

/**
 * Represents the console functionality for executing commands and handling spew output.
 */
export interface Console {
	/**
	 * Executes a console command.
	 * @param command The command to execute in the console.
	 */
	ExecCommand(command: string): void;

	/**
	 * Retrieves autocomplete suggestions for a given console command.
	 * @param command The console command to provide autocomplete suggestions for.
	 * @returns an array of autocomplete suggestions.
	 */
	GetAutocompleteSuggestions(command: string): Promise<string[]>;

	/**
	 * Registers a callback function to receive spew output.
	 * @param callback The callback function that will receive spew output.
	 * @returns an object that can be used to unregister the callback.
	 */
	RegisterForSpewOutput(callback: (output: SpewOutput) => void): Unregisterable;
}

export type SpewType_t = 'assert' | 'error' | 'warning' | 'info' | 'input';

/**
 * Represents spew output information.
 */
export interface SpewOutput {
	/**
	 * The content of the spew output.
	 */
	spew: string;

	/**
	 * The type or category of the spew output.
	 */
	spew_type: SpewType_t;
}
