import { NCCOActions } from '../../enums/NCCOActions.mjs';
import { RecordingFormat } from '../../enums/NCCO/RecordingFormat.mjs';
import { RecordAction } from '../../types/NCCO/RecordAction.mjs';

/**
 * Represents a Record action in an NCCO.
 */
declare class Record implements RecordAction {
    /**
     * The action type for the Record action.
     */
    action: NCCOActions.RECORD;
    /**
     * The recording format (e.g., "mp3", "wav").
     */
    format?: RecordingFormat;
    /**
     * The split type for recording (always "conversation").
     */
    protected wrappedSplit?: string;
    /**
     * The number of audio channels (1 to 32).
     */
    protected wrappedChannels?: number;
    /**
     * The duration of silence (in seconds) to end the recording (3 to 10 seconds).
     */
    protected wrappedEndOnSilence?: number;
    /**
     * The DTMF key that ends the recording (e.g., "0", "*", "#").
     */
    protected wrappedEndOnKey?: string;
    /**
     * The maximum recording duration in seconds (3 to 7200 seconds).
     */
    protected wrappedTimeOut?: number;
    /**
     * Whether to play a beep before recording starts.
     */
    beepStart?: boolean;
    /**
     * The URL where recording events will be sent.
     */
    eventUrl?: string[];
    /**
     * The HTTP method for sending recording events (e.g., "POST").
     */
    eventMethod?: string;
    /**
     * Creates a new Record action.
     *
     * @param {RecordingFormat} format - The recording format (e.g., "mp3", "wav").
     * @param {string} split - The split type for recording (should be "conversation").
     * @param {number} channels - The number of audio channels (1 to 32).
     * @param {number} endOnSilence - The duration of silence (in seconds) to end the recording (3 to 10 seconds).
     * @param {string} endOnKey - The DTMF key that ends the recording (e.g., "0", "*", "#").
     * @param {number} timeout - The maximum recording duration in seconds (3 to 7200 seconds).
     * @param {boolean} beepStart - Whether to play a beep before recording starts.
     * @param {string} eventUrl - The URL where recording events will be sent.
     * @param {string} eventMethod - The HTTP method for sending recording events (e.g., "POST").
     */
    constructor(format?: RecordingFormat, split?: string, channels?: number, endOnSilence?: number, endOnKey?: string, timeout?: number, beepStart?: boolean, eventUrl?: string, eventMethod?: string);
    /**
     * Getter for the number of audio channels.
     *
     * @return {number | undefined} - The current number of audio channels.
     */
    get channels(): number | undefined;
    /**
     * Setter for the number of audio channels.
     *
     * @param {number} channels - The number of audio channels (1 to 32).
     * @throws {Error} - If the channel value is invalid or split is not set to "conversation."
     */
    set channels(channels: number);
    /**
     * Getter for the character that signals the end of recording.
     *
     * @return {string | undefined} - The character that signals the end of recording.
     */
    get endOnKey(): string | undefined;
    /**
     * Setter for the DTMF key that ends the recording.
     *
     * @param {string} character - The DTMF key that ends the recording (e.g., "0", "*", "#").
     * @throws {Error} - If the character is not a valid DTMF key.
     */
    set endOnKey(character: string);
    /**
     * Getter for the duration of silence (in seconds) that signals the end of recording.
     *
     * @return {number | undefined} - The duration of silence (in seconds) that signals the end of recording.
     */
    get endOnSilence(): number | undefined;
    /**
     * Setter for the duration of silence to end the recording.
     *
     * @param {number} numSeconds - The duration of silence in seconds (3 to 10 seconds).
     * @throws {Error} - If the duration value is out of the valid range.
     */
    set endOnSilence(numSeconds: number);
    /**
     * Getter for the recording split type.
     *
     * @return {string} - The recording split type, which is always 'conversation'.
     */
    get split(): 'conversation';
    /**
     * Setter for the recording split type.
     *
     * @param {string} splitType - The recording split type. Must be set to 'conversation'.
     * @throws {Error} - Throws an error if the splitType is not 'conversation'.
     */
    set split(splitType: string);
    /**
     * Getter for the recording timeout duration in seconds.
     *
     * @return {number | undefined } - The recording timeout duration in seconds.
     */
    get timeout(): number | undefined;
    /**
     * Setter for the recording timeout.
     *
     * @param {number} seconds - The maximum recording duration in seconds (3 to 7200 seconds).
     * @throws {Error} - If the timeout value is out of the valid range.
     */
    set timeout(seconds: number);
    /**
     * Serializes the Record action to NCCO format.
     *
     * @return {RecordAction} - The serialized Record action.
     */
    serializeToNCCO(): RecordAction;
}

export { Record };
