import vonage from './vonage';
import { CustomData } from './JsonUtils';
import { Nullable } from '../kotlin/clientsdk-clientcore_js';
import { Option } from './Option';
/**
 * Parameters object for {@link VonageClient.createConversation}
 *
 * @property name The name to initialize the conversation with
 * @property displayName The displayName to initialize the conversation with
 * @property imageUrl The name to imageUrl the conversation with
 * @property ttl The time-to-live (in seconds) to initialize the conversation with
 * @property customSortKey The customSortKey to initialize the conversation with.
 * When {@link GetConversationsParameters.orderBy} is set to {@link OrderBy.CUSTOM_SORT_KEY}, conversations will be sorted according to the value of this property.
 * @property customData Custom data associated with the conversation
 * @interface
 * @group Chat
 */
export type CreateConversationParameters = Omit<vonage.CreateConversationParametersJS, 'ttl' | 'customData'> & {
    ttl?: Nullable<number>;
    customData?: Nullable<CustomData>;
};
/**
 * Parameters object for {@link VonageClient.getConversations}
 *
 * @property order The order in which conversations are presented, default is {@link PresentingOrder.ASC}.
 * @property pageSize The maximum number of conversations to retrieve per request, default is 10.
 * @property cursor The cursor indicating the starting point for pagination, default is the first page.
 * @property includeCustomData Indicates whether to include custom data in the results, default is false.
 * @property orderBy The strategy for ordering the conversations, default is {@link OrderBy.CREATED}.
 * @interface
 * @group Chat
 */
export type GetConversationsParameters = Omit<vonage.GetConversationsParametersJS, 'pageSize' | 'order' | 'orderBy'> & {
    pageSize?: Nullable<number>;
    order?: Nullable<PresentingOrder>;
    orderBy?: Nullable<OrderBy>;
};
/**
 * Parameters object for {@link VonageClient.getConversationEvents}
 *
 * @property order The order in which conversation events are presented, default is {@link PresentingOrder.ASC}.
 * @property pageSize The maximum number of conversation events to retrieve per request, default is 10.
 * @property cursor The cursor indicating the starting point for pagination, default is the first page.
 * @property eventFilter A list of strings containing the types of events to be fetched and should have maximum 5 elements, default includes all events.
 * @property includeDeletedEvents Indicates whether to include deleted events in the list, default is false.
 * @property startId Specify the starting id of the events to be returned, default includes all events.
 * @interface
 * @group Chat
 */
export type GetConversationEventsParameters = Omit<vonage.GetConversationEventsParametersJS, 'pageSize' | 'startId' | 'order'> & {
    pageSize?: Nullable<number>;
    startId?: Nullable<number>;
    order?: Nullable<PresentingOrder>;
};
/**
 * Parameters object for {@link VonageClient.getConversationMembers}
 *
 * @property order The order in which conversation members are presented, default is {@link PresentingOrder.ASC}.
 * @property pageSize The maximum number of conversation members to retrieve per request, default is 10.
 * @property cursor The cursor indicating the starting point for pagination, default is the first page.
 * @interface
 * @group Chat
 */
export type GetConversationMembersParameters = Omit<vonage.GetConversationMembersParametersJS, 'pageSize' | 'order'> & {
    pageSize?: Nullable<number>;
    order?: Nullable<PresentingOrder>;
};
/**
 * Parameters object for {@link VonageClient.getCallLegs}
 *
 * @property order The order in which call legs are presented, default is {@link PresentingOrder.ASC}.
 * @property pageSize The maximum number of legs to retrieve per request, default is 10.
 * @property cursor The cursor indicating the starting point for pagination, default is the first page.
 * @interface
 * @group Voice
 */
export type GetCallLegsParameters = Omit<vonage.GetCallLegsParametersJS, 'pageSize' | 'order'> & {
    order?: Nullable<PresentingOrder>;
    pageSize?: Nullable<number>;
};
/**
 * Parameters object for {@link VonageClient.updateConversation}.
 *
 * Every property is an {@link Option} monad.
 * When set to {@link Option.Some} the property will be updated.
 * When set to {@link Option.None} the property will remain unchanged.
 *
 * @property name The name of the conversation.
 * @property displayName A display name for the conversation.
 * @property imageUrl The URL of an image associated with the conversation.
 * @property ttl The time-to-live (TTL) for the conversation in seconds.
 * @property customSortKey A custom sort key for the conversation.
 * @property customData Custom data associated with the conversation.
 * @interface
 * @group Chat
 */
export interface UpdateConversationParameters {
    name?: string | Option<string>;
    displayName?: string | null | Option<string | null | undefined>;
    imageUrl?: string | null | Option<string | null | undefined>;
    ttl?: number | Option<number>;
    customSortKey?: string | null | Option<string | null | undefined>;
    customData?: CustomData | null | Option<CustomData | null | undefined>;
}
/**
 * The order in which paginated objects are presented.
 *
 * @group Chat
 */
export type PresentingOrder = Lowercase<typeof vonage.PresentingOrderJS.prototype.name> | vonage.PresentingOrderJS;
/**
 * The order in which paginated objects are presented.
 * @group Chat
 * @enum
 * @property ASC Ascending order
 * @property DESC Descending order
 */
export declare const PresentingOrder: {
    [prop in typeof vonage.PresentingOrderJS.prototype.name]: Lowercase<prop>;
};
/**
 * The sorting strategy used for paginated objects.
 *
 * @group Chat
 */
export type OrderBy = Lowercase<typeof vonage.OrderByJS.prototype.name> | vonage.OrderByJS;
/**
 * The sorting strategy used for paginated objects.
 * @group Chat
 * @enum
 */
export declare const OrderBy: {
    [prop in typeof vonage.OrderByJS.prototype.name]: Lowercase<prop>;
};
