package types

import "fmt"

type MessageType int

// 微信定义的消息类型
const (
	MsgTypeText           MessageType = 1     // 文本消息
	MsgTypeImage          MessageType = 3     // 图片消息
	MsgTypeVoice          MessageType = 34    // 语音消息
	MsgTypeVerify         MessageType = 37    // 认证消息
	MsgTypePossibleFriend MessageType = 40    // 好友推荐消息
	MsgTypeShareCard      MessageType = 42    // 名片消息
	MsgTypeVideo          MessageType = 43    // 视频消息
	MsgTypeEmoticon       MessageType = 47    // 表情消息
	MsgTypeLocation       MessageType = 48    // 地理位置消息
	MsgTypeApp            MessageType = 49    // APP消息
	MsgTypeVoip           MessageType = 50    // VOIP消息
	MsgTypeVoipNotify     MessageType = 52    // VOIP结束消息
	MsgTypeVoipInvite     MessageType = 53    // VOIP邀请
	MsgTypeMicroVideo     MessageType = 62    // 小视频消息
	MsgTypeSys            MessageType = 10000 // 系统消息
	MsgTypeRecalled       MessageType = 10002 // 消息撤回
)

var MessageTypeMap = map[MessageType]string{
	MsgTypeText:           "文本消息",
	MsgTypeImage:          "图片消息",
	MsgTypeVoice:          "语音消息",
	MsgTypeVerify:         "认证消息",
	MsgTypePossibleFriend: "好友推荐消息",
	MsgTypeShareCard:      "名片消息",
	MsgTypeVideo:          "视频消息",
	MsgTypeEmoticon:       "表情消息",
	MsgTypeLocation:       "地理位置消息",
	MsgTypeApp:            "APP消息",
	MsgTypeVoip:           "VOIP消息",
	MsgTypeVoipNotify:     "VOIP结束消息",
	MsgTypeVoipInvite:     "VOIP邀请",
	MsgTypeMicroVideo:     "小视频消息",
	MsgTypeSys:            "系统消息",
	MsgTypeRecalled:       "消息撤回",
}

func (mt MessageType) String() string {
	if msg, ok := MessageTypeMap[mt]; ok {
		return msg
	}
	return fmt.Sprintf("未知消息类型(%d)", mt)
}