package im

import "encoding/json"

func EncodeSendMessage(msg Message) (string, error) {
	data, err := json.Marshal(msg)
	if err != nil {
		return "", err
	}
	return string(data), nil
}

// Reference: https://open.feishu.cn/document/server-docs/im-v1/message-content-description/create_json#c9e08671
type SendMessageText struct {
	Text string `json:"text"`
}

func (m SendMessageText) Type() MessageType {
	return MessageTypeText
}

type SendMessageCardTemplateData struct {
	ID   string         `json:"template_id"`
	Vars map[string]any `json:"template_variable"`
}

// Reference: https://open.feishu.cn/document/server-docs/im-v1/message-content-description/create_json#11e75d0
type SendMessageCardTemplate struct {
	MType string                      `json:"type"` // template
	Data  SendMessageCardTemplateData `json:"data"`
}

func (m SendMessageCardTemplate) Type() MessageType {
	return MessageTypeInteractive
}

type SendMessageCardBody struct {
	MsgType MessageType `json:"msg_type"` // interactive
	Card    Message     `json:"card"`
}

func (m SendMessageCardBody) Type() MessageType { return MessageTypeInteractive }

// Reference: https://open.feishu.cn/document/server-docs/im-v1/message-content-description/create_json#7111df05
type SendMessageImage struct {
	ImageKey string `json:"image_key"`
}

func (m SendMessageImage) Type() MessageType {
	return MessageTypeImage
}

type SendMessageFile struct {
	FileKey string `json:"file_key"`
}

func (m SendMessageFile) Type() MessageType {
	return MessageTypeFile
}
