import { ReactElement } from 'react';
import type { CardIcon } from '../SearchResults/BuiltInIconRenderer';
/**
 * Workflow defines the interaction steps for the AI bot.
 */
export interface Workflow {
    id: string;
    displayName: string;
    goals: string[];
    informationToCollect: WorkflowInformationToCollect[];
    botPersona?: string;
    context?: string[];
    guidance?: string[];
    initialReplyMessage: string;
    supportedInputs?: WorkflowInputTypes[];
}
export interface WorkflowInformationToCollect {
    description: string;
    required: boolean;
}
/** ===========WORKFLOW DATA TYPES=========== * */
/**
 * MessageAttachmentContentType represents possible type of information that can be attached to a Workflow.
 */
export type MessageAttachmentContentType = WorkflowCodeContentType | WorkflowTextContentType;
/**
 * BaseType is a base interface for data types.
 */
interface WorkflowBaseContentType {
    type: string;
    contentInputLabel: string;
    attachmentIcon?: CardIcon;
}
export interface WorkflowModalProps {
    titleInputLabel?: string;
    modalHelpText?: string;
    modalHelpElement?: ReactElement;
}
export interface WorkflowCodeContentType extends WorkflowBaseContentType {
    type: 'CODE';
    language: string;
}
export interface WorkflowTextContentType extends WorkflowBaseContentType {
    type: 'TEXT';
}
/** ===========WORKFLOW INPUT TYPES=========== * */
/**
 * WorkflowInputType defines the type of attachments in a Workflow.
 */
export interface WorkflowBaseInputTypes {
    id: string;
    type: string;
    displayName: string;
}
/**
 * WorkflowInputTypes represents possible ways of collecting attachments in a Workflow.
 */
export type WorkflowInputTypes = WorkflowFunctionalMultiInput | WorkflowModalSingleInput;
/**
 * WorkflowModalSingleInput represents a modal input type.
 */
export interface WorkflowModalSingleInput extends WorkflowBaseInputTypes {
    type: 'MODAL';
    contentType: MessageAttachmentContentType;
    workflowModalProps?: WorkflowModalProps;
}
/**
 * WorkflowFunctionalMultiInput represents a function to be called when the attachment is invoked.
 */
export interface WorkflowFunctionalMultiInput extends WorkflowBaseInputTypes {
    type: 'FUNCTIONAL_MULTI_ATTACHMENT';
    onInvoke: (workflow: Workflow, selectedInputType: WorkflowInputTypes, callback: (messageAttachments: MessageAttachment[]) => void, currentMessageAttachments: MessageAttachment[]) => void;
}
/**
 * MessageAttachment represents an item in the messageAttachments state.
 */
export interface MessageAttachment {
    contentType: MessageAttachmentContentType;
    title: string;
    content: string;
    id: string;
    context?: string[];
}
export interface MessageAttributes {
    attachments?: MessageAttachment[];
    workflow?: Workflow;
    workflowSchemaVersion?: string;
}
export declare const WORKFLOW_SERIALIZATION_VERSION = "0.0.1";
export {};
