import IPostMessage from '../../IPostMessage';
import { CodesMDC } from './CodesMDC';
import INativeMdcCommands from './INativeMdcCommands';
/**
 * Type representing the IP address to which MDC commands can be sent.
 * It can be either 'localhost' or a valid string representing an IP address.
 */
export type IpAddressType = 'localhost' | string;
/**
 * Response object returned by Tizen Core App.
 */
export interface IMDCResponse {
    /**
     * The type of the response, either 'ACK' for acknowledgment or 'NACK' for negative acknowledgment.
     */
    type: 'ACK' | 'NACK';
    /**
     * The command type that was executed, represented as a number.
     * Should match the command number in {@link CodesMDC}.
     */
    commandType: number;
    /**
     * The result of the command execution, represented as a number.
     * This value can vary depending on the command executed.
     */
    result: number;
}
/**
 * The `sos.native.mdc` API groups together methods for controlling Tizen devices using MDC commands.
 *
 * :::warning
 * This API is currently available on Tizen devices only.
 * :::
 *
 * <details>
 *     <summary>MDC Management Capabilities</summary>
 * 		| Capability | Description |
 * 		|:------------|:-------------|
 * 		| `NATIVE_COMMANDS_MDC` | If device supports performing MDC commands |
 *
 * 		If you want to check if the device supports this capability, use [`sos.management.supports()`](https://developers.signageos.io/sdk/sos_management/#supports).
 * </details>
 */
export default class Mdc implements INativeMdcCommands {
    private messagePrefix;
    private postMessage;
    static MESSAGE_PREFIX: string;
    /** @internal */
    constructor(messagePrefix: string, postMessage: IPostMessage<any>);
    /**
     * The `sendOne()` method sends an MDC command to another Tizen device on the same network or to the localhost.
     *
     * @param ipAddress The IP address of the device to send the command to.
     * @param command The MDC command to send {@link CodesMDC}.
     * @param data The optional data to send with the command.
     * @throws {Error} If the `ipAddress` is not a valid string or if the `command` is not a valid number.
     * @throws {Error} If the `data` is not an array of numbers.
     * @throws {Error} If any error occurs during the command execution.
     * @returns {Promise<IMDCResponse>} MDC response object containing the result of the command execution.
     * @since 6.5.1
     *
     * @example
     * await sos.native.mdc.sendOne('localhost', CodesMDC.BRIGHTNESS_CONTROL);
     * await sos.native.mdc.sendOne('192.168.0.10', CodesMDC.VOLUME_CONTROL, [50]);
     * await sos.native.mdc.sendOne('192.168.0.10', CodesMDC.PICTURE_CONTROL, [0x54, 0x03]);
     *
     * // You can also send custom number if we don't have predefined command in our enum
     * await sos.native.mdc.sendOne('192.168.0.10', 0x01, []);
     */
    sendOne(ipAddress: IpAddressType, command: CodesMDC, data?: number[]): Promise<IMDCResponse>;
    /**
     * The `sendOneRaw()` method sends an MDC command to another Tizen device on the same network or to the localhost,
     * but without explicitly specifying the command.
     *
     * @param ipAddress The IP address of the device to send the command to.
     * @param data The data as array of numbers to send with the command. It can be also empty array.
     * @throws {Error} If the `ipAddress` is not a valid string or if the `command` is not a valid number.
     * @throws {Error} If the `data` is not an array of numbers.
     * @throws {Error} If any error occurs during the command execution.
     * @returns {Promise<IMDCResponse>} MDC response object containing the result of the command execution.
     *
     * @since 6.5.1
     *
     * @example
     * await sos.native.mdc.sendOneRaw('localhost', [0x1B, 0x00, 0x01, 0x74]); // Promise<IMDCResponse>
     *
     * // Example of returned object
     * {
     *     "type": "ACK", // or NACK
     *     "commandType": 4,
     *     "result": 0, // Value what command returned
     * }
     */
    sendOneRaw(ipAddress: IpAddressType, data: number[] | []): Promise<IMDCResponse>;
    private getMessage;
    private getMessagePrefix;
}
