import IPostMessage from '../../IPostMessage';
import IBrightness from './IBrightness';
import IOrientation from './IOrientation';
import IScreen, { TakeAndUploadScreenshotOptions, TakeAndUploadScreenshotResult } from './IScreen';
/**
 * The `sos.management.screen` API groups together methods for controlling the screen of the device. It allows for manipulating the screen
 * resolution or orientation, set brightness, retrieve the current brightness of the display, and manipulate the power mode.
 *
 * :::warning
 * This method only turns on/off the display/backlight. It will **not** set any power-saving mode. We also strongly recommend rebooting any
 * device once a day.
 * :::
 *
 * :::info
 * There is a specific behavior based on the device type you operate:
 * **On SoC displays** (e.g., Samsung Tizen, LG webOS, Android-based SoC displays from Sony, Vestel Philips,...)
 * - `powerOn()` and `powerOff()` are turning the display backlight and the panel off
 * **On external media players** (e.g., BrightSign, Windows PC, Android players, Raspberry Pi)
 * - `powerOn()` and `powerOff()` are turning off the video output (typically HDMI-out); this functionality does not manage the connected display backlight and needs to be controlled via RS232 or another way.
 * :::
 *
 * <details>
 *     <summary>Screen Management Capabilities</summary>
 * 		| Capability | Description |
 * 		|:------------|:-------------|
 * 		| `SET_BRIGHTNESS` | If device can brightness. |
 * 		| `GET_BRIGHTNESS` | If device can return current brightness. |
 * 		| `SCREEN_RESIZE` | If the device can change screen resolution and orientation. |
 * 		| `ORIENTATION_LANDSCAPE` | If device supports landscape orientation. |
 * 		| `ORIENTATION_PORTRAIT` | If device supports portrait orientation. |
 * 		| `ORIENTATION_LANDSCAPE_FLIPPED` | If device supports flipped landscape orientation. |
 * 		| `ORIENTATION_PORTRAIT_FLIPPED` | If device supports flipped portrait orientation. |
 * 		| `ORIENTATION_AUTO` | If device supports auto orientation. |
 *
 * 		If you want to check if the device supports those capabilities, use [`sos.management.supports()`](https://developers.signageos.io/sdk/sos_management/#supports).
 * </details>
 */
export default class Screen implements IScreen {
    private messagePrefix;
    private postMessage;
    /** @internal */
    constructor(messagePrefix: string, postMessage: IPostMessage<any>);
    /**
     * The `resize()` method changes the resolution and orientation of the display.
     *
     * :::info
     * For Tizen, you have to provide `baseUrl` which points to the Core App for Tizen, which will be downloaded to the device [Read more on how to upload your Core Apps here.](https://docs.signageos.io/hc/en-us/articles/4405245195666).
     * :::
     *
     * @param baseUrl SSSP & Tizen devices require installing an orientation-specific Core App if you want to switch orientation to portrait or landscape.
     * @param orientation Screen orientation
     * @param resolution Where it applies (mainly SSSP 2/3)
     * @param currentVersion Core App version
     * @param videoOrientation If the video has a different orientation than the HTML5 content
     * @returns {Promise<void>} A promise that resolves when the screen is successfully resized.
     * @throws {Error} If `baseUrl` is not a valid URL
     * @throws {Error} If `orientation` is not a valid orientation
     * @throws {Error} If `resolution` is not a valid resolution
     * @throws {Error} If `currentVersion` is not a valid string
     * @throws {Error} If `videoOrientation` is not a valid video orientation
     * @since 3.0.0
     *
     * @example
     * // for Tizen
     * await sos.management.screen.resize(
     *     "https://cdn.your-cms.com/tizen/1.0.4",
     *     "PORTRAIT",
     *     "FULL_READY",
     *     "1.0.4"
     * );
     *
     * // for all other supported devices
     * await sos.management.screen.resize(
     *     "",
     *     "PORTRAIT",
     *     "HD_READY",
     *     ""
     * );
     *
     * @example // {@link https://github.com/signageos/applet-examples/blob/master/examples/management-js-api/resize/ |How to resize screen on device}
     */
    resize(baseUrl: string, orientation: string, resolution: string, currentVersion: string, videoOrientation?: string): Promise<void>;
    /**
     * The `getOrientation()` method returns the current orientation of the screen.
     *
     * @returns {Promise<IOrientation>} A promise that resolves to the current screen orientation.
     * @throws {Error} If the orientation cannot be retrieved.
     * @since 4.7.0
     *
     * @example
     * const orientation = (await sos.management.screen.getOrientation()).screenOrientation;
     * console.log(`Current screen orientation is: ${orientation}`);
     */
    getOrientation(): Promise<IOrientation>;
    /**
     * The `setBrightness()` method sets the brightness of the screen. It supports two different brightness values for 2 time points in the day.
     *
     * @param timeFrom1 Time in the XX:XX format
     * @param brightness1 Brightness value between 0 and 100
     * @param timeFrom2 Time in the XX:XX format
     * @param brightness2 Brightness value between 0 and 100
     * @return {Promise<void>} A promise that resolves when the brightness is successfully set.
     * @throws {Error} If `timeFrom1` is not a valid time in the XX:XX format
     * @throws {Error} If `brightness1` is not a number between 0 and 100
     * @throws {Error} If `timeFrom2` is not a valid time in the XX:XX format
     * @throws {Error} If `brightness2` is not a number between 0 and 100
     * @since 3.0.0
     *
     * @example // {@link https://github.com/signageos/applet-examples/blob/master/examples/management-js-api/brightness/ | Applet Example with Brightness setup}
     *
     * @example
     * // Set brightness to 10% between 00:00 and 17:00, and to 30% between 17:00 and 23:59
     * await sos.management.screen.setBrightness(
     *     '00:00',
     *     '10',
     *     '17:00',
     *     '30'
     * );
     *
     * // Set brightness to 50% all day
     * await sos.management.screen.setBrightness(
     *    00:00,
     *    50,
     *    23:59,
     *    50
     * );
     */
    setBrightness(timeFrom1: string, brightness1: number, timeFrom2: string, brightness2: number): Promise<void>;
    /**
     * The `getBrightness()` method returns information about the currently set brightness values.
     *
     * @returns {Promise<IBrightness>} A promise that resolves to the current brightness settings.
     * @throws {Error} If the brightness cannot be retrieved.
     * @since 3.0.0
     */
    getBrightness(): Promise<IBrightness>;
    /**
     * @deprecated Use `takeAndUploadScreenshot(uploadBaseUrl: string, computeHash?: boolean): Promise<{ screenshotUrl: string; aHash?: string }>` instead.
     */
    takeAndUploadScreenshot(uploadBaseUrl: string): Promise<string>;
    /**
     * @deprecated Use `takeAndUploadScreenshot(uploadBaseUrl: string, options: TakeAndUploadScreenshotOptions): Promise<TakeAndUploadScreenshotResult>` instead.
     */
    takeAndUploadScreenshot(uploadBaseUrl: string, computeHash?: boolean): Promise<TakeAndUploadScreenshotResult>;
    /**
     * The `takeAndUploadScreenshot()` method takes a screenshot and uploads it to a specified URL. This can be either a signageOS upload URL
     * (`https://upload.signageos.io`) or a dedicated server URL for uploading screenshots. The format in which the screenshot is uploaded may be
     * different for every platform.
     *
     * To implement a custom screenshot upload server, it needs to implement these endpoints:
     * - POST `/upload/file?prefix=screenshot/` - Endpoint for receiving screenshot using form data, with the image set to the `file` field.
     * - POST `/upload/raw?prefix=screenshot/` - Endpoint for receiving screenshots as raw data.
     * - POST `/upload/image-data-uri?prefix=screenshot/` - Endpoint for receiving screenshots encoded as a data URL.
     *
     * signageOS provides a standalone server that implements all of those methods. It is offered to all of our partners through the
     * [support ticketing system](https://box.signageos.io/support/).
     *
     * @param uploadBaseUrl URL to which the screenshot will be uploaded. It can be either a signageOS upload URL or a custom server URL.
     * @param options Optional parameters for taking and uploading the screenshot.
     * @param options.computeHash Whether to compute a hash of the screenshot and return it in the response.
     * @param options.headers Additional headers to include in the upload request for POST requests.
     * @return {Promise<TakeAndUploadScreenshotResult>} A promise that resolves to an object containing the screenshot URL and optionally a hash of the screenshot.
     * @throws {Error} If `uploadBaseUrl` is not a valid URL
     * @throws {Error} If `computeHash` is not a boolean
     * @throws {Error} If `headers` is not a valid object
     * @throws {Error} If the screenshot cannot be taken or uploaded.
     * @since 3.0.0
     *
     * @example // {@link https://github.com/signageos/applet-examples/blob/master/examples/management-js-api/screenshot-upload | Applet Example with Screenshot Upload}
     *
     * @example
     * const { screenshotUrl, aHash } = await sos.management.screen.takeAndUploadScreenshot(
     *   'https://your.upload.server/upload/file?prefix=screenshot/',
     *   { computeHash: true },
     * );
     * console.log(`Screenshot uploaded to: ${screenshotUrl} with aHash: ${aHash}`);
     *
     * // Upload screenshot with custom headers
     * const { screenshotUrl } = await sos.management.screen.takeAndUploadScreenshot(
     *    'https://your.upload.server/upload/file?prefix=screenshot/',
     *    {
     *        computeHash: false,
     *        headers: {
     *        	'Authorization': 'Bearer yourTokenHere',
     *          'Custom-Header': 'CustomValue'
     *        }
     *    },
     * );
     */
    takeAndUploadScreenshot(uploadBaseUrl: string, options?: TakeAndUploadScreenshotOptions): Promise<TakeAndUploadScreenshotResult>;
    /**
     * The `powerOn()` method turns the screen on.
     *
     * @returns {Promise<void>} A promise that resolves when the screen is successfully turned on.
     * @throws {Error} If the screen cannot be turned on.
     * @since 3.0.0
     */
    powerOn(): Promise<void>;
    /**
     * The `powerOff()` method turns the screen off. It will turn off the display backlight and the panel, and it will also disable the applet.
     *
     * :::warning
     * On Android devices, `powerOff()` also shuts down the webview and the Applet. It's the default Android behavior that cannot be changed. Once
     * the Applet is off, you cannot call `powerOn()` to resume the playback.
     *
     * To manage the display On/Off state, use [REST API Power Actions](https://developers.signageos.io/api/#tag/DevicePower-Actions) instead.
     * :::
     *
     * @returns {Promise<void>} A promise that resolves when the screen is successfully turned off.
     * @throws {Error} If the screen cannot be turned off.
     * @since 3.0.0
     */
    powerOff(): Promise<void>;
    /**
     * The `isPoweredOn()` method returns whether the screen is on.
     *
     * @returns {Promise<boolean>} A promise that resolves to a boolean indicating whether the screen is powered on.
     * @throws {Error} If the power state cannot be retrieved.
     * @since 3.0.0
     */
    isPoweredOn(): Promise<boolean>;
    private getMessage;
    private getMessagePrefix;
}
