import {
    MessageHandled,
    MessageType,
    PayMethod,
    PayStatus
} from "@/customer-service/model";

export interface Chat {
    id: number;
    org_id: string;
    uid: string;
    oid: string;
    eid: string;
    type: string;
    title: string;
    app_id: string;
    tag: string;
    msg_id: number;
    ext: string;
    exit_msg_id: number;
    is_exited: boolean;
    dnd: number;
    is_top: boolean;
    label: string;
    join_msg_id: number;
    last_read_msg_id: number;
    biz_id: string;
    last_msg_sender: string;
    last_msg_content: string;
    last_msg_type: MessageType;
    model_name: string;
    obj_id: string;
    is_finish: boolean;
    is_deleted: boolean;
    is_remove: boolean;
    member_type: number;
    ref_id: number;
    unread_msg_count: number;
    at_me: boolean;
    at_all: boolean;
    last_login_oid: string;
    owner_oid: string;
    owner_eid: string;
    is_act: true;
    last_read_id: number;
    msg_count_after_leave: number;
    create_time: number;
    update_time: number;
    last_msg_ts: number;
    members_updated: number;
    user_updated: number;
    chat_id: number;
    catalog: string;
    biz_type_id: number;
    biz_type_code: string;
    business_data?: string;
    detail_name?: string;
}

export interface Message {
    chat_id: number;
    oid: string;
    eid: string;
    id: number;
    ts: number;
    type: MessageType;
    msg: string;
    total_read_count: number;
    read_count: number;
    like_count: number;
    ref_id: number;
    at_id: string;
    is_read: boolean;
    like: boolean;
    create_time: number;
    update_time: number;
    status: number;
    url: string;
    is_open: boolean;
    handled?: MessageHandled;
}

export interface NotifyMessage {
    chat_type: string;
    chat_id: number;
    eid: string;
    ts: number;
    msg_type: string;
    msg: string;
}

export interface Member {
    chat_id: number;
    oid: string;
    eid: string;
    type: number;
    is_exited: boolean;
    is_remove: boolean;
    is_top: boolean;
    label: string;
    create_time: number;
    update_time: number;
    nick_name: string;
}

export type TextMessageBody = {
    text: string;
};

export type FileMessageBody = {
    name: string;
    url: string; // 生消息是本地path,熟消息是文件url_id
    size: number; // number, 可选,文件大小:单位-字节
    remark: string;
    isNeedUploaded?: boolean; // pc客户端自定义属性(只有生消息的消息体才有该属性, 值为false时不需要上传, true和undefined时需要上传)
    source?: {
        source_type: number; // 来源类型(若为团队小站文件,则来源类型为团队小站文件)
        source_id: number; // 来源id(若为团队小站文件,此处为团队工作站id)
        source_name: string; // 来源名称(若为团队小站文件,此处传入团队小站名称)
        source_icon: string; // 来源图标(若为团队小站文件,此处传入团队icon的url)
        extra?: { [prop: string]: any }; // 附加信息
    };
};

export type ImageMessageBody = {
    name: string;
    url: string;
    size: number;
    w: number;
    h: number;
    thumbnail?: string; // 缩略图地址
    preview?: string; // 预览图地址
    remark: string;
};

export type VoiceMessageBody = {
    name: string;
    url: string;
    size: number;
    duration: number; // 语音时间:单位-ms
};

// 第一顺序 default_text 第二顺序 operator_text、receiver_text
export type NotifyMessageBody = {
    operator_id: string;
    receiver_ids: string[];
    default_text: string; // 默认文本
    operator_text: string; // 操作人文本
    receiver_text: string; // 处理人文本
};

export type TextNoticeMessageBody = {
    title: string;
    text: string;
    is_at_all: boolean; // 是否@全部人
};

export type VideoMessageBody = {
    name: string;
    url: string; // 生消息是本地path,熟消息是文件url_id
    size: number;
    cover?: string;
    duration: number;
    w: number;
    h: number;
    isNeedUploaded?: boolean; // pc客户端自定义属性(只有生消息的消息体才有该属性, 值为false时不需要上传, true和undefined时需要上传)
};

export type UrlMessageBody = {
    title: string;
    icon: string;
    url: string;
    desc: string;
    source?: {
        source_type: number; // 来源类型(若为团队小站文件,则来源类型为团队小站文件)
        source_id: number; // 来源id(若为团队小站文件,此处为团队工作站id)
        source_name: string; // 来源名称(若为团队小站文件,此处传入团队小站名称)
        source_icon: string; // 来源图标(若为团队小站文件,此处传入团队icon的url)
        extra?: { [prop: string]: any }; // 附加信息
    };
};

export type ForwardMessageBody = {
    snap: string;
    chat_type: string; // 会话类型
    chat_id: number; // 会话id
    msg_ids: number[]; // 消息id集合
};

export type QuoteMessageBody = {
    text: string;
    quote_text: string; // JSON字符串
    quote_msg_type: string;
    quote_eid: string;
    quote_msg_id: number; // 引用id
};

export type CommentForwardMessageBody = {
    snap: string;
    channel_id: number; // 团队工作站id
    topic_id: number; // 主题id
    comment_ids: number[]; // 评论id集合
};

export interface PayMessageBody {
    status: PayStatus;
    paymentFunction: PayMethod;
    itemName: string;
    amount: string;
    paymentId: string;
}

export interface CsUser {
    id: number;
    oid: string;
    eid: string;
    is_deleted: boolean;
    delete_time: number;
    delete_oid: string;
    delete_eid: string;
    service_id: number;
    type: number;
    name: string;
    mobile: string;
    email: string;
    description: string;
    create_time: number;
    update_time: number;
    chat_count: number;
    status: number;
}