/**************************************************************************
 * IMPORTS
 ***************************************************************************/
import BaseResource from "./BaseResource";
/**************************************************************************
 * TYPES + INTERFACES
 ***************************************************************************/
export interface Conversation {
    session_id: string;
    website_id: string;
    inbox_id?: string;
    people_id?: string;
    state?: ConversationState;
    status?: number;
    is_verified?: boolean;
    is_blocked?: boolean;
    availability?: string;
    active?: ConversationActive;
    last_message?: string;
    preview_message?: ConversationPreviewMessage;
    topic?: string;
    verifications?: ConversationVerification[];
    participants?: ConversationParticipant[];
    mentions?: string[];
    compose?: ConversationCompose;
    unread?: ConversationUnread;
    assigned?: ConversationAssigned;
    meta?: ConversationMeta;
    created_at?: number;
    updated_at?: number;
    waiting_since?: number;
}
type ConversationNew = {
    session_id?: string;
};
export interface ConversationActive {
    now?: boolean;
    last?: number;
}
export interface ConversationPreviewMessage {
    type?: string;
    from?: string;
    excerpt?: string;
    fingerprint?: number;
}
export interface ConversationCompose {
    operator?: ConversationComposeAtom;
    visitor?: ConversationComposeAtom;
}
export interface ConversationComposeAtom {
    type?: string;
    excerpt?: string;
    timestamp?: number;
    user?: ConversationComposeAtomUser;
    automated?: boolean;
}
export interface ConversationComposeAtomUser {
    user_id?: string;
    nickname?: string;
    avatar?: string;
}
export interface ConversationUnread {
    operator?: number;
    visitor?: number;
}
export interface ConversationAssigned {
    user_id?: string;
}
export interface ConversationVerification {
    identity?: string;
    method?: string;
    annotation?: string;
}
export interface ConversationRelations {
    conversations?: ConversationRelationsConversations;
}
export interface ConversationRelationsConversations {
    parent?: string | null;
    children?: string[];
}
export interface ConversationParticipant {
    type?: string;
    target?: string;
}
export interface ConversationParticipants {
    participants?: ConversationParticipant[];
}
export interface ConversationParticipantsSave {
    participants?: ConversationParticipant[];
    user?: ConversationMessageUser;
    origin?: string;
}
export interface ConversationMeta {
    nickname?: string;
    email?: string;
    phone?: string;
    ip?: string;
    avatar?: string;
    data?: Record<string, string | boolean | number>;
    connection?: ConnectionInfo;
    device?: DeviceInfo;
    segments?: string[];
    address?: string;
    subject?: string;
    origin?: string;
}
export interface ConnectionInfo {
    isp?: string;
    asn?: string;
}
export interface DeviceInfo {
    capabilities?: string[];
    geolocation?: GeolocationInfo;
    system?: SystemInfo;
    timezone?: number;
    locales?: string[];
}
export interface GeolocationInfo {
    country?: string;
    region?: string;
    city?: string;
    coordinates?: Coordinates;
}
export interface Coordinates {
    latitude?: number;
    longitude?: number;
}
export interface SystemInfo {
    os?: OSInfo;
    engine?: EngineInfo;
    browser?: BrowserInfo;
    useragent?: string;
}
export interface OSInfo {
    version?: string;
    name?: string;
}
export interface EngineInfo {
    name?: string;
    version?: string;
}
export interface BrowserInfo {
    major?: string;
    version?: string;
    name?: string;
}
export type ConversationMessageType = "text" | "file" | "animation" | "audio" | "carousel" | "note" | "picker" | "field" | "event";
export type ConversationState = "pending" | "unresolved" | "resolved";
export type ConversationMessageContent = (string | ConversationFileMessageContent | ConversationAnimationMessageContent | ConversationAudioMessageContent | ConversationPickerMessageContent | ConversationFieldMessageContent | ConversationCarouselMessageContent | ConversationEventMessageContent);
export interface ConversationMessage {
    session_id?: string;
    website_id?: string;
    type?: ConversationMessageType;
    from?: string;
    origin?: string;
    content?: ConversationMessageContent;
    preview?: ConversationMessagePreview[];
    mentions?: string[];
    read?: string;
    delivered?: string;
    ignored?: Record<string, ConversationMessageIgnored>;
    edited?: boolean;
    translated?: boolean;
    automated?: boolean;
    stamped?: boolean;
    fingerprint?: number;
    timestamp?: number;
    user?: ConversationMessageUser;
    references?: ConversationMessageReference[];
    original?: ConversationMessageOriginal;
    properties?: {
        [key: string]: string | number | boolean;
    };
}
export interface ConversationFileMessageContent {
    name?: string;
    url?: string;
    type?: string;
}
export interface ConversationAnimationMessageContent {
    url?: string;
    type?: string;
}
export interface ConversationAudioMessageContent {
    url?: string;
    type?: string;
    duration?: number;
}
export interface ConversationPickerMessageContent {
    id?: string;
    text?: string;
    choices?: ConversationPickerMessageContentChoice[];
    required?: boolean;
}
export interface ConversationPickerMessageContentChoice {
    value?: string;
    icon?: string;
    label?: string;
    selected?: boolean;
    action?: ConversationPickerMessageContentChoiceAction;
}
export interface ConversationPickerMessageContentChoiceAction {
    type?: string;
    target?: string;
}
export interface ConversationFieldMessageContent {
    id?: string;
    text?: string;
    explain?: string;
    value?: string;
    required?: boolean;
}
export interface ConversationCarouselMessageContent {
    text?: string;
    targets?: ConversationCarouselMessageContentTarget[];
}
export interface ConversationCarouselMessageContentTarget {
    title?: string;
    description?: string;
    image?: string;
    actions?: ConversationCarouselMessageContentTargetAction[];
}
export interface ConversationCarouselMessageContentTargetAction {
    label?: string;
    url?: string;
}
export interface ConversationEventMessageContent {
    namespace?: string;
    text?: string;
}
export interface ConversationMessagePreview {
    url?: string;
    website?: string;
    title?: string;
    preview?: ConversationMessagePreviewInformation;
    stamped?: boolean;
}
export interface ConversationMessagePreviewInformation {
    excerpt?: string;
    image?: string;
    embed?: string;
}
export interface ConversationMessageIgnored {
    type?: string;
    reason?: string;
}
export interface ConversationMessageUser {
    type?: string;
    user_id?: string;
    nickname?: string;
    avatar?: string;
}
export interface ConversationMessageReference {
    type?: string;
    name?: string;
    target?: string;
}
export interface ConversationMessageOriginal {
    original_id?: string;
}
export type ConversationMessageNew = ConversationTextMessageNew | ConversationNoteMessageNew | ConversationFileMessageNew | ConversationAnimationMessageNew | ConversationAudioMessageNew | ConversationPickerMessageNew | ConversationFieldMessageNew | ConversationCarouselMessageNew | ConversationEventMessageNew;
export interface ConversationMessageNewBase {
    type: ConversationMessageType;
    from: string;
    origin: string;
    content: unknown;
    fingerprint?: number;
    user?: ConversationMessageUser;
    references?: ConversationMessageReference[];
    original?: ConversationMessageOriginal;
    properties?: {
        [key: string]: string | number | boolean;
    };
    timestamp?: number;
    stealth?: boolean;
    translated?: boolean;
    automated?: boolean;
}
export interface ConversationTextMessageNew extends ConversationMessageNewBase {
    type: "text" | "note";
    content: string;
}
export interface ConversationNoteMessageNew extends ConversationTextMessageNew {
    type: "note";
    mentions?: string[];
}
export interface ConversationFileMessageNew extends ConversationMessageNewBase {
    type: "file";
    content: ConversationFileMessageContent;
}
export interface ConversationAnimationMessageNew extends ConversationMessageNewBase {
    type: "animation";
    content: ConversationAnimationMessageContent;
}
export interface ConversationAudioMessageNew extends ConversationMessageNewBase {
    type: "audio";
    content: ConversationAudioMessageContent;
}
export interface ConversationPickerMessageNew extends ConversationMessageNewBase {
    type: "picker";
    content: ConversationPickerMessageContent;
}
export interface ConversationFieldMessageNew extends ConversationMessageNewBase {
    type: "field";
    content: ConversationFieldMessageContent;
}
export interface ConversationCarouselMessageNew extends ConversationMessageNewBase {
    type: "carousel";
    content: ConversationCarouselMessageContent;
}
export interface ConversationEventMessageNew extends ConversationMessageNewBase {
    type: "event";
    content: ConversationEventMessageContent;
}
export interface ConversationComposeMessageNew {
    type: "start" | "stop";
    from: string;
    excerpt?: string;
    stealth?: boolean;
    automated?: boolean;
}
export interface ConversationSuggestedSegment {
    segment?: string;
    count?: number;
}
export interface ConversationSuggestedData {
    key?: string;
    count?: number;
}
export interface ConversationSpam {
    spam_id?: string;
    type?: string;
    reason?: string;
    metadata?: Record<string, unknown>;
    headers?: Record<string, unknown>;
    timestamp?: number;
}
export interface ConversationSpamContent extends ConversationSpam {
    content?: Record<string, unknown>;
}
export interface ConversationReadMessageMark {
    from?: string;
    origin?: string;
    fingerprints?: number[];
}
export interface ConversationUnreadMessageMark {
    from?: string;
}
export interface ConversationRoutingAssignUpdate {
    assigned?: ConversationRoutingAssignUpdateAssigned;
    silent?: boolean;
}
export interface ConversationRoutingAssignUpdateAssigned {
    user_id?: string;
}
export interface ConversationOriginal {
    website_id?: string;
    session_id?: string;
    original_id?: string;
    type?: string;
    headers?: Record<string, any>;
    content?: string;
    timestamp?: number;
}
export interface ConversationPage {
    page_title?: string;
    page_url?: string;
    page_referrer?: string;
    timestamp?: number;
}
export interface ConversationEvent {
    text?: string;
    data?: Record<string, any>;
    color?: string;
    timestamp?: number;
}
export interface ConversationFile {
    name?: string;
    type?: string;
    url?: string;
    fingerprint?: number;
    timestamp?: number;
}
export interface ConversationStateData {
    state?: ConversationState;
}
export interface ConversationBlock {
    blocked?: boolean;
}
export interface ConversationVerify {
    verified?: boolean;
    verifications?: ConversationVerification[];
}
export type ConversationVerifyIdentity = "email" | "phone" | `urn:${string}`;
export type ConversationVerifyMethod = "link";
export interface ConversationVerifyIdentityRequest {
    identity?: ConversationVerifyIdentity;
    method?: ConversationVerifyMethod;
    recipient?: string;
}
export interface ConversationVerifyIdentityRedeem {
    identity?: ConversationVerifyIdentity;
    token?: string;
    recipient?: string;
}
export interface ConversationBrowsing {
    browsing_id?: string;
    browsing_token?: string;
    useragent?: string;
}
export interface ConversationCall {
    call_id?: string;
}
export interface BaseConversationsListOptions {
    per_page?: number;
    include_empty?: 0 | 1;
    filter_inbox_id?: string;
    filter_unread?: 0 | 1;
    filter_resolved?: 0 | 1;
    filter_not_resolved?: 0 | 1;
    filter_mention?: 0 | 1;
    filter_assigned?: string;
    filter_unassigned?: 0 | 1;
    filter_date_start?: string;
    filter_date_end?: string;
    order_date_created?: 0 | 1;
    order_date_updated?: 0 | 1;
    order_date_waiting?: 0 | 1;
}
export interface StandardSearchOptions extends BaseConversationsListOptions {
    search_type: "text" | "segment";
    search_query: string;
    search_operator?: never;
}
export interface FilterSearchOptions extends BaseConversationsListOptions {
    search_type: "filter";
    search_query: FilterSearchQuery[];
    search_operator?: "and" | "or";
}
export interface FilterSearchQuery {
    criterion: string;
    query: string[];
    model: string;
    operator: string;
}
export type ConversationsListOptions = BaseConversationsListOptions | StandardSearchOptions | FilterSearchOptions;
/**************************************************************************
 * CLASSES
 ***************************************************************************/
/**
 * Crisp WebsiteConversation Resource
 * @class
 */
declare class WebsiteConversation extends BaseResource {
    /**
     * List Conversations
     */
    listConversations(websiteID: string, pageNumber?: number, options?: ConversationsListOptions): Promise<Conversation[]>;
    /**
     * List Suggested Conversation Segments
     */
    listSuggestedConversationSegments(websiteID: string, pageNumber?: number): Promise<ConversationSuggestedSegment[]>;
    /**
     * Delete Suggested Conversation Segment
     */
    deleteSuggestedConversationSegment(websiteID: string, segment: string): Promise<any>;
    /**
     * List Suggested Conversation Data Keys
     */
    listSuggestedConversationDataKeys(websiteID: string, pageNumber?: number): Promise<ConversationSuggestedData[]>;
    /**
     * Delete Suggested Conversation Data Key
     */
    deleteSuggestedConversationDataKey(websiteID: string, key: string): Promise<any>;
    /**
     * List Spam Conversations
     */
    listSpamConversations(websiteID: string, pageNumber?: number): Promise<ConversationSpam[]>;
    /**
     * Resolve Spam Conversation Content
     */
    resolveSpamConversationContent(websiteID: string, spamID: string): Promise<ConversationSpamContent>;
    /**
     * Submit Spam Conversation Decision
     */
    submitSpamConversationDecision(websiteID: string, spamID: string, action: string): Promise<any>;
    /**
     * Create A New Conversation
     */
    createNewConversation(websiteID: string): Promise<ConversationNew>;
    /**
     * Check If Conversation Exists
     */
    checkConversationExists(websiteID: string, sessionID: string): Promise<any>;
    /**
     * Get A Conversation
     */
    getConversation(websiteID: string, sessionID: string): Promise<Conversation>;
    /**
     * Remove A Conversation
     */
    removeConversation(websiteID: string, sessionID: string): Promise<any>;
    /**
     * Initiate A Conversation With Existing Session
     */
    initiateConversationWithExistingSession(websiteID: string, sessionID: string): Promise<any>;
    /**
     * Get Messages In Conversation
     */
    getMessagesInConversation(websiteID: string, sessionID: string, timestampBefore?: string | number): Promise<ConversationMessage[]>;
    /**
     * Send A Message In Conversation
     */
    sendMessageInConversation(websiteID: string, sessionID: string, message: ConversationMessageNew): Promise<any>;
    /**
     * Get A Message In Conversation
     */
    getMessageInConversation(websiteID: string, sessionID: string, fingerprint: number): Promise<ConversationMessage>;
    /**
     * Update A Message In Conversation
     */
    updateMessageInConversation(websiteID: string, sessionID: string, fingerprint: number, content: ConversationMessageContent): Promise<any>;
    /**
     * Remove A Message In Conversation
     */
    removeMessageInConversation(websiteID: string, sessionID: string, fingerprint: number): Promise<any>;
    /**
     * Compose A Message In Conversation
     */
    composeMessageInConversation(websiteID: string, sessionID: string, compose: ConversationComposeMessageNew): Promise<any>;
    /**
     * Mark Messages As Read In Conversation
     */
    markMessagesReadInConversation(websiteID: string, sessionID: string, read: ConversationReadMessageMark): Promise<any>;
    /**
     * Mark Conversation As Unread
     */
    markConversationAsUnread(websiteID: string, sessionID: string, unread: ConversationUnreadMessageMark): Promise<any>;
    /**
     * Mark Messages As Delivered In Conversation
     */
    markMessagesDeliveredInConversation(websiteID: string, sessionID: string, delivered: ConversationReadMessageMark): Promise<any>;
    /**
     * Update Conversation Open State
     */
    updateConversationOpenState(websiteID: string, sessionID: string, opened: boolean): Promise<any>;
    /**
     * Get Conversation Routing Assign
     */
    getConversationRoutingAssign(websiteID: string, sessionID: string): Promise<any>;
    /**
     * Assign Conversation Routing
     */
    assignConversationRouting(websiteID: string, sessionID: string, assign: ConversationRoutingAssignUpdate): Promise<any>;
    /**
     * Update Conversation Inbox
     */
    updateConversationInbox(websiteID: string, sessionID: string, inboxID?: string | null): Promise<any>;
    /**
     * Get Conversation Metas
     */
    getConversationMetas(websiteID: string, sessionID: string): Promise<ConversationMeta>;
    /**
     * Update Conversation Metas
     */
    updateConversationMetas(websiteID: string, sessionID: string, metas: ConversationMeta): Promise<any>;
    /**
     * Get An Original Message In Conversation
     */
    getOriginalMessageInConversation(websiteID: string, sessionID: string, originalID: string): Promise<ConversationOriginal>;
    /**
     * List Conversation Pages
     */
    listConversationPages(websiteID: string, sessionID: string, pageNumber?: number): Promise<ConversationPage[]>;
    /**
     * List Conversation Events
     */
    listConversationEvents(websiteID: string, sessionID: string, pageNumber?: number): Promise<ConversationEvent[]>;
    /**
     * List Conversation Files
     */
    listConversationFiles(websiteID: string, sessionID: string, pageNumber?: number): Promise<ConversationFile[]>;
    /**
     * Get Conversation State
     */
    getConversationState(websiteID: string, sessionID: string): Promise<ConversationStateData>;
    /**
     * Change Conversation State
     */
    changeConversationState(websiteID: string, sessionID: string, state: ConversationState, user?: ConversationMessageUser, origin?: string): Promise<any>;
    /**
     * Get Conversation Relations
     */
    getConversationRelations(websiteID: string, sessionID: string): Promise<ConversationRelations>;
    /**
     * Get Conversation Participants
     */
    getConversationParticipants(websiteID: string, sessionID: string): Promise<ConversationParticipants>;
    /**
     * Save Conversation Participants
     */
    saveConversationParticipants(websiteID: string, sessionID: string, participants: ConversationParticipantsSave): Promise<any>;
    /**
     * Get Block Status For Conversation
     */
    getBlockStatusForConversation(websiteID: string, sessionID: string): Promise<ConversationBlock>;
    /**
     * Block Incoming Messages For Conversation
     */
    blockIncomingMessagesForConversation(websiteID: string, sessionID: string, blocked: boolean, user?: ConversationMessageUser, origin?: string): Promise<any>;
    /**
     * Get Verify Status For Conversation
     */
    getVerifyStatusForConversation(websiteID: string, sessionID: string): Promise<ConversationVerify>;
    /**
     * Update Verify Status For Conversation
     */
    updateVerifyStatusForConversation(websiteID: string, sessionID: string, verified: boolean): Promise<any>;
    /**
     * Request Identity Verification For Conversation
     */
    requestIdentityVerificationForConversation(websiteID: string, sessionID: string, verification: ConversationVerifyIdentityRequest): Promise<any>;
    /**
     * Redeem Identity Verification Link For Conversation
     */
    redeemIdentityVerificationLinkForConversation(websiteID: string, sessionID: string, verification: ConversationVerifyIdentityRedeem): Promise<any>;
    /**
     * Request Email Transcript For Conversation
     */
    requestEmailTranscriptForConversation(websiteID: string, sessionID: string, to: string, email?: string): Promise<any>;
    /**
     * Request Chatbox Binding Purge For Conversation
     */
    requestChatboxBindingPurgeForConversation(websiteID: string, sessionID: string): Promise<any>;
    /**
     * Request User Feedback For Conversation
     */
    requestUserFeedbackForConversation(websiteID: string, sessionID: string): Promise<any>;
    /**
     * List Browsing Sessions For Conversation
     */
    listBrowsingSessionsForConversation(websiteID: string, sessionID: string): Promise<ConversationBrowsing[]>;
    /**
     * Initiate Browsing Session For Conversation
     */
    initiateBrowsingSessionForConversation(websiteID: string, sessionID: string): Promise<any>;
    /**
     * Send Action To An Existing Browsing Session
     */
    sendActionToExistingBrowsingSession(websiteID: string, sessionID: string, browsingID: string, action: string): Promise<any>;
    /**
     * Assist Existing Browsing Session
     */
    assistExistingBrowsingSession(websiteID: string, sessionID: string, browsingID: string, assist: object): Promise<any>;
    /**
     * Initiate New Call Session For Conversation
     */
    initiateNewCallSessionForConversation(websiteID: string, sessionID: string, mode: string, user?: ConversationMessageUser, origin?: string): Promise<any>;
    /**
     * Get Ongoing Call Session For Conversation
     */
    getOngoingCallSessionForConversation(websiteID: string, sessionID: string): Promise<ConversationCall>;
    /**
     * Abort Ongoing Call Session For Conversation
     */
    abortOngoingCallSessionForConversation(websiteID: string, sessionID: string, callID: string, user?: ConversationMessageUser, origin?: string): Promise<any>;
    /**
     * Transmit Signaling On Ongoing Call Session
     */
    transmitSignalingOnOngoingCallSession(websiteID: string, sessionID: string, callID: string, payload: object): Promise<any>;
    /**
     * Request Tool Call For Conversation
     */
    requestToolCallForConversation(websiteID: string, sessionID: string, command: string, payload?: object): Promise<any>;
    /**
     * Deliver Widget Button Action For Conversation
     */
    deliverWidgetButtonActionForConversation(websiteID: string, sessionID: string, pluginID: string, sectionID: string, itemID: string, data: object, value?: string): Promise<any>;
    /**
     * Deliver Widget Data Fetch Action For Conversation
     */
    deliverWidgetDataFetchActionForConversation(websiteID: string, sessionID: string, pluginID: string, sectionID: string, itemID: string, data: object): Promise<any>;
    /**
     * Deliver Widget Data Edit Action For Conversation
     */
    deliverWidgetDataEditActionForConversation(websiteID: string, sessionID: string, pluginID: string, sectionID: string, itemID: string, value: string): Promise<any>;
    /**
     * Schedule A Reminder For Conversation
     */
    scheduleReminderForConversation(websiteID: string, sessionID: string, date: string, note: string, user?: ConversationMessageUser, origin?: string): Promise<any>;
    /**
     * Report Conversation
     */
    reportConversation(websiteID: string, sessionID: string, flag: string): Promise<any>;
}
/**************************************************************************
 * EXPORTS
 ***************************************************************************/
export default WebsiteConversation;
