import ' rollup-plugin-inject-process-env';
import { ChatUserInfo } from "@xapp/stentor-chat-widget";
import { Action } from "@reduxjs/toolkit";
import { Attachment } from "../xapp/Attachment";
import { ChatServerMessage } from "../xapp/ChatServerMessage";
import { VisualState } from "./ChatState";
export type CONNECTION_STATUS_TYPE = "online" | "pending" | "offline";
export type ACCOUNT_STATUS_TYPE = "offline" | "online";
export type ACTION_TYPE = "chat" | "session_id" | "visual_status" | "account_status" | "connection_update" | "department_update" | "visitor_update" | "agent_update" | "error" | "reset" | "sendGreeting";
export interface ActionDetail {
    timestamp: number;
}
export interface ChatActionDetail<T> extends ActionDetail {
    readonly type: T;
    readonly user: ChatUserInfo;
}
export interface ChatAction extends Action<"chat"> {
    detail: ChatDetail;
}
export interface ChatSendGreetingDetail extends ChatActionDetail<"sendGreeting"> {
    detail: undefined;
}
export interface SendGreetingAction extends Action<"sendGreeting"> {
    detail: ChatSendGreetingDetail;
}
export interface ConnectionReceiveTokenAction extends Action<"receiveToken"> {
    readonly detail: ChatConnectionReceiveTokenDetail;
}
export interface ChatConnectionReceiveTokenDetail extends ChatActionDetail<"receiveToken"> {
    readonly token: string;
    readonly timestamp: number;
}
export interface ChatMemberJoinDetail extends ChatActionDetail<"chat.memberjoin"> {
}
export interface ChatMemberLeaveDetail extends ChatActionDetail<"chat.memberleave"> {
}
export interface ChatMemberPositionDetail extends ChatActionDetail<"chat.queue.position"> {
    queuePosition: number;
}
export interface ChatRequestRatingDetail extends ChatActionDetail<"chat.request.rating"> {
}
export interface ChatRatingDetail extends ChatActionDetail<"chat.rating"> {
    newRating: string;
}
export interface ChatFileDetail extends ChatActionDetail<"chat.file"> {
    readonly attachment: Attachment;
}
export interface ChatMsgDetail extends ChatActionDetail<"chat.msg"> {
    msg: ChatServerMessage;
}
export interface ChatFailureMsgDetail extends ChatActionDetail<"chat.failureMsg"> {
    failureMsg: FailureMessageDetail;
}
export interface FailureMessageDetail {
    readonly retry: number;
    readonly delay: number;
    readonly text: string;
}
export interface ChatTypingDetail extends ChatActionDetail<"chat.typing"> {
    typing: boolean;
}
export interface ChatOfflineDetail extends ChatActionDetail<"chat.offline"> {
}
export interface ChatPrechatDetail extends ChatActionDetail<"chat.prechat"> {
}
export interface ConnectionUpdateAction extends Action<"connection_update"> {
    detail: ConnectionUpdateDetail;
}
export interface ConnectionUpdateDetail extends ActionDetail {
    status: CONNECTION_STATUS_TYPE;
}
export interface AccountStatusAction extends Action<"account_status"> {
    detail: AccountStatusDetail;
}
export interface AccountStatusDetail extends ActionDetail {
    status: ACCOUNT_STATUS_TYPE;
}
export interface SessionIdAction extends Action<"session_id"> {
    detail: SessionIdDetail;
}
export interface SessionIdDetail extends ActionDetail {
    sessionId: string;
}
export interface VisualStatusAction extends Action<"visual_status"> {
    detail: VisualStatusDetail;
}
export interface VisualStatusDetail extends ActionDetail {
    status: VisualState;
}
export interface DepartmentUpdateAction extends Action<"department_update"> {
    detail: DepartmentUpdateDetail;
}
export interface DepartmentUpdateDetail extends ActionDetail {
    id: string;
    displayName: string;
}
export interface VisitorUpdateAction extends Action<"visitor_update"> {
    detail: VisitorUpdateDetail;
}
export interface VisitorUpdateDetail extends ActionDetail {
    displayName: string;
    typing: boolean;
}
export interface AgentUpdateAction extends Action<"agent_update"> {
    readonly detail: AgentUpdateDetail;
}
export interface AgentUpdateDetail extends ActionDetail {
    readonly nick: string;
    readonly displayName: string;
    readonly typing: boolean;
    readonly avatarPath?: string;
    readonly joined: boolean;
}
export interface SyntheticAction extends Action<"synthetic"> {
    detail: SyntheticMsgDetail | SyntheticFileDetail | SyntheticOptionDetail;
}
export interface SyntheticMsgDetail extends ActionDetail {
    readonly type: "write_msg";
    readonly msg: ChatServerMessage;
    readonly user: ChatUserInfo;
}
export interface SyntheticOptionDetail extends ChatActionDetail<"visitor.send.option"> {
    msg: ChatServerMessage;
}
export interface SyntheticFileDetail extends ChatActionDetail<"visitor.send.file"> {
    attachment: Attachment;
    /**
     * Optional request attributes.
     */
    readonly attributes?: Record<string, unknown>;
}
export interface ResetAction extends Action<"reset"> {
}
export type ActionType = ChatAction | SessionIdAction | VisualStatusAction | ConnectionUpdateAction | AccountStatusAction | DepartmentUpdateAction | VisitorUpdateAction | AgentUpdateAction | SyntheticAction | ConnectionReceiveTokenAction | ResetAction | SendGreetingAction;
export type ChatDetail = ChatMemberJoinDetail | ChatMemberLeaveDetail | ChatMemberPositionDetail | ChatRequestRatingDetail | ChatRatingDetail | ChatFileDetail | ChatMsgDetail | ChatFailureMsgDetail | ChatTypingDetail | ChatOfflineDetail | ChatPrechatDetail | ChatSendGreetingDetail | ChatConnectionReceiveTokenDetail;
