package protocol

// MessageType 表示一条消息的传输类型。
// v1 只区分普通文本和文件两类负载。
type MessageType string

const (
	// MessageTypeText 表示正文按 UTF-8 文本解释，天然兼容 ASCII。
	MessageTypeText MessageType = "text"
	// MessageTypeFile 表示正文是原始文件字节。
	MessageTypeFile MessageType = "file"
	// MessageTypeRegister 表示 peer 向 server 显式注册自己的身份。
	MessageTypeRegister MessageType = "register"
	// MessageTypeError 表示 server 向 peer 返回错误信息。
	MessageTypeError MessageType = "error"
)

// ServerPeerID 是协议中约定的 server 端固定标识。
const ServerPeerID = "server"

// Message 是 peer 和 server 共用的传输消息结构。
// 头部元信息会被编码为 JSON，Body 则作为原始字节拼接在头部之后。
type Message struct {
	Type MessageType `json:"type"` // 消息类型，只允许 text 或 file。
	ID   uint64      `json:"id"`   // 由发送方生成，用于追踪消息。
	From string      `json:"from"` // 发送方标识。
	To   string      `json:"to"`   // 接收方标识。

	// FileName 仅在 Type 为 file 时使用。
	FileName string `json:"file_name,omitempty"`
	// Body 是真正传输的正文内容，不进入头部 JSON。
	Body []byte `json:"-"`
}
