package com.yonge.cooleshow.biz.dal.wrapper;

import com.alibaba.fastjson.annotation.JSONField;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.util.List;

public class ImHistoryMessageWrapper {


    @Data
    @ApiModel("ImHistoryMessage-iM语音消息")
    public static class TimSoundElem {

        @JSONField(name = "Url")
        @ApiModelProperty("语音下载地址，可通过该 URL 地址直接下载相应语音。")
        private String Url;

        @JSONField(name = "UUID")
        @ApiModelProperty("语音的唯一标识，客户端用于索引语音的键值")
        private String UUID;

        @JSONField(name = "Size")
        @ApiModelProperty("语音数据大小，单位：字节。")
        private Integer Size;

        @JSONField(name = "Second")
        @ApiModelProperty("语音时长，单位：秒。")
        private Integer Second;

        @JSONField(name = "Download_Flag")
        @ApiModelProperty("语音下载方式标记。目前 Download_Flag 取值只能为2，表示可通过Url字段值的 URL 地址直接下载语音。")
        private Integer Download_Flag;

    }

    @Data
    @ApiModel("ImHistoryMessage-iM文件")
    public static class TimFileElem {

        @JSONField(name = "Url")
        @ApiModelProperty("文件下载地址，可通过该 URL 地址直接下载相应文件。")
        private String Url;

        @JSONField(name = "UUID")
        @ApiModelProperty("文件的唯一标识，客户端用于索引文件的键值。")
        private String UUID;

        @JSONField(name = "FileSize")
        @ApiModelProperty("文件数据大小，单位：字节。")
        private Integer FileSize;

        @JSONField(name = "FileName")
        @ApiModelProperty("文件名称。")
        private String FileName;

        @JSONField(name = "Download_Flag")
        @ApiModelProperty("文件下载方式标记。目前 Download_Flag 取值只能为2，表示可通过Url字段值的 URL 地址直接下载文件。")
        private Integer Download_Flag;

    }

    @Data
    @ApiModel("ImHistoryMessage-iM视频")
    public static class TimVideoFileElem {

        @JSONField(name = "VideoUrl")
        @ApiModelProperty("视频下载地址。可通过该 URL 地址直接下载相应视频。")
        private String VideoUrl;

        @JSONField(name = "VideoUUID")
        @ApiModelProperty("文视频的唯一标识，客户端用于索引视频的键值。")
        private String VideoUUID;

        @JSONField(name = "VideoSize")
        @ApiModelProperty("视频数据大小，单位：字节。")
        private Integer VideoSize;

        @JSONField(name = "VideoSecond")
        @ApiModelProperty("视频时长，单位：秒。Web 端不支持获取视频时长，值为0")
        private Integer VideoSecond;

        @JSONField(name = "VideoFormat")
        @ApiModelProperty("视频格式，例如 mp4")
        private String VideoFormat;

        @JSONField(name = "VideoDownloadFlag")
        @ApiModelProperty("视频下载方式标记。目前 VideoDownloadFlag 取值只能为2，表示可通过 VideoUrl 字段值的 URL 地址直接下载视频。")
        private Integer VideoDownloadFlag;

        @JSONField(name = "ThumbUrl")
        @ApiModelProperty("视频缩略图下载地址。可通过该 URL 地址直接下载相应视频缩略图。")
        private String ThumbUrl;

        @JSONField(name = "ThumbUUID")
        @ApiModelProperty("视频缩略图的唯一标识，客户端用于索引视频缩略图的键值")
        private String ThumbUUID;

        @JSONField(name = "ThumbSize")
        @ApiModelProperty("缩略图大小，单位：字节。")
        private Integer ThumbSize;

        @JSONField(name = "ThumbWidth")
        @ApiModelProperty("缩略图宽度，单位为像素。")
        private Integer ThumbWidth;

        @JSONField(name = "ThumbHeight")
        @ApiModelProperty("缩略图高度，单位为像素。")
        private Integer ThumbHeight;

        @JSONField(name = "ThumbFormat")
        @ApiModelProperty("缩略图格式，例如 JPG、BMP 等。")
        private String ThumbFormat;

        @JSONField(name = "ThumbDownloadFlag")
        @ApiModelProperty("视频缩略图下载方式标记。目前 ThumbDownloadFlag 取值只能为2，表示可通过 ThumbUrl 字段值的 URL 地址直接下载视频缩略图。")
        private Integer ThumbDownloadFlag;
    }


    @Data
    @ApiModel("ImHistoryMessage-iM位置")
    public static class TimLocationElem {
        @JSONField(name = "Desc")
        @ApiModelProperty("地理位置描述信息。")
        private String Desc;

        @JSONField(name = "Latitude")
        @ApiModelProperty("纬度。")
        private double Latitude;

        @JSONField(name = "Longitude")
        @ApiModelProperty("经度。")
        private double Longitude;
    }

    @Data
    @ApiModel("ImHistoryMessage-iM合并转发")
    public static class TimRelayElem {

        @ApiModelProperty("合并转发消息的标题。")
        private String Title;

        @ApiModelProperty("被转发的消息条数。")
        private Integer MsgNum;

        @ApiModelProperty("兼容文本。当不支持合并转发消息的老版本 SDK 收到此类消息时，IM 后台会将该消息转化成兼容文本再下发。")
        private String CompatibleText;

        @ApiModelProperty("合并消息的摘要列表，是一个 String 数组")
        private String[] AbstractList;

        @ApiModelProperty("消息列表。当被转发的消息长度之和小于等于12K时才会有此字段，此时不会有 JsonMsgKey 字段。")
        private List<TimRelayElemList> MsgList;

        @ApiModelProperty("合并转发的消息列表 Key。当被转发的消息长度之和大于12K时才会有此字段，此时不会有 MsgList 字段。")
        private String JsonMsgKey;


    }


    @Data
    @ApiModel("ImHistoryMessage-iM合并转发消息列表")
    public static class TimRelayElemList {

        @ApiModelProperty("消息发送方 UserID。被转发的消息为单聊或群聊时都有此字段。")
        private String From_Account;

        @ApiModelProperty("消息接收方 UserID。被转发的消息为单聊才有此字段。")
        private String To_Account;

        @ApiModelProperty("群 ID。被转发的消息为群聊才有此字段。")
        private String GroupId;

        @ApiModelProperty("消息序列号（32位无符号整数）。")
        private Integer MsgSeq;

        @ApiModelProperty("消息随机数（32位无符号整数）。")
        private Integer MsgRandom;

        @ApiModelProperty("消息的秒级时间戳。")
        private Integer MsgTimeStamp;

        @ApiModelProperty("消息内容")
        private List<TimRelayElemMessage> MsgBody;

        @ApiModelProperty("消息自定义数据（云端保存，会发送到对端，程序卸载重装后还能拉取到）。")
        private String CloudCustomData;

    }

    @Data
    @ApiModel("ImHistoryMessage-iM合并转发消息内容体")
    public static class TimRelayElemMessage {

        @ApiModelProperty("消息类型")
        private String msgType;

        @ApiModelProperty("消息内容")
        private Object msgContent;

    }



}
