import { KeyEvent, DeviceInfo, RegistryData } from "../common";
import { FileSystem } from "./FileSystem";
import { OutputProxy } from "./OutputProxy";
export declare class BrsDevice {
    static readonly deviceInfo: DeviceInfo;
    static readonly registry: RegistryData;
    static readonly fileSystem: FileSystem;
    static readonly isDevMode: boolean;
    static readonly keysBuffer: KeyEvent[];
    static readonly terms: Map<string, string>;
    static readonly sfx: string[];
    static stdout: OutputProxy;
    static stderr: OutputProxy;
    static sharedArray: Int32Array;
    static displayEnabled: boolean;
    static singleKeyEvents: boolean;
    static useCORSProxy: boolean;
    static lastRemote: number;
    static lastKey: number;
    static lastMod: number;
    static lastKeyTime: number;
    static currKeyTime: number;
    /** Clock Support properties */
    private static timeZone;
    private static clockFormat;
    private static locale;
    /** Memory Volumes Shared Buffers */
    private static tmpVolume?;
    private static cacheFS?;
    /** Array Buffer to Share the Registry across threads */
    private static registryVersion;
    private static sharedRegistry?;
    /**
     * Returns the SharedArrayBuffer used for the tmp: volume.
     * Creates the buffer if it doesn't exist.
     * @returns SharedArrayBuffer for tmp: volume
     */
    static getTmpVolume(): SharedArrayBuffer;
    /**
     * Returns the SharedArrayBuffer used for the cachefs: volume.
     * Creates the buffer if it doesn't exist.
     * @returns SharedArrayBuffer for cachefs: volume
     */
    static getCacheFS(): SharedArrayBuffer;
    /**
     * Resets all memory volumes (tmp: and cachefs:) by clearing their buffers.
     * Reinitializes the file system with cleared volumes.
     */
    static resetMemoryVolumes(): Promise<void>;
    /**
     * Updates the device registry with the provided data.
     * @param data Map or SharedArrayBuffer with registry content
     */
    static setRegistry(data: Map<string, string> | SharedArrayBuffer): void;
    /**
     * Stores the current registry to the shared buffer and notifies the main thread for persistence.
     */
    static flushRegistry(): void;
    /**
     * Refreshes the registry from the shared buffer if a newer version is available.
     */
    static refreshRegistry(): void;
    /**
     * Sets up the device shared array for inter-thread communication.
     * @param sharedArray Int32Array to be used as the shared array
     */
    static setSharedArray(sharedArray: Int32Array): void;
    /**
     * Sets the device info by merging provided values with existing configuration.
     * Normalizes and validates device info values before assignment.
     * @param deviceInfo DeviceInfo object with configuration to set
     */
    static setDeviceInfo(deviceInfo: DeviceInfo): void;
    /**
     * Assigns the device info value to the static deviceInfo object
     * @param key Key of the DeviceInfo
     * @param value Value to be assigned
     */
    private static assignDeviceInfoValue;
    /**
     * Normalizes certain device info values before assignment
     * @param key Key of the DeviceInfo
     * @param value Value to be normalized
     * @returns Normalized value
     */
    private static normalizeDeviceInfoValue;
    /**
     * Loads the localized terms based on the current locale ID to the terms map.
     * Note: Only to be called after filesystem volumes are mounted.
     */
    static loadLocaleTerms(): void;
    /**
     * Gets the current display mode based on device info.
     * @returns Display mode string ("FHD", "HD", or "SD")
     */
    static getDisplayMode(): string;
    /**
     * Returns the translated term based on current locale ID.
     * @param term Term to be translated
     * @returns Translated term or original if not found
     */
    static getTerm(term: string): string;
    /**
     * Returns the configured CORS proxy with the URL if applicable.
     * Skips proxy for localhost and 127.0.0.1.
     * @param url Optional URL to be fetched (defaults to empty string)
     * @returns Proxied URL or original URL
     */
    static getCORSProxy(url?: string): string;
    /**
     * Checks if the Break Command is set in the shared array.
     * Handles debug pause and continue states.
     * @param debugMode Whether debug mode is enabled
     * @returns Debug command code
     */
    static checkBreakCommand(debugMode: boolean): number;
    /**
     * Extracts the data buffer from the shared array.
     * Reads characters until null terminator and clears buffer flag.
     * @returns Data buffer content as string
     */
    static readDataBuffer(): string;
    /**
     * Updates the control keys buffer from shared array and returns the next key.
     * Handles single key event mode and remote button press/release logic.
     * @returns Next key event to be handled or undefined if queue is empty
     */
    static updateKeysBuffer(): KeyEvent | undefined;
    /**
     * Plays a system navigation sound if it exists in default sounds.
     * @param sound Sound name to play
     */
    static playSound(sound: string): void;
    /**
     * Gets the next available sound effect stream.
     * @param id Sound effect ID
     * @returns Index of the stream or -1 if not available
     */
    static getSfxStream(id: number): number;
    /**
     * Gets the current time in the Roku beacon format.
     * Formats time based on configured clock format (12h/24h) and locale.
     * @returns Formatted time string
     */
    static getTime(): string;
}
