package lark

// RequestBody represents the payload sent to the Lark API.
type RequestBody struct {
	MsgType   MsgType `json:"msg_type"`
	Content   Content `json:"content"`
	Timestamp string  `json:"timestamp,omitempty"`
	Sign      string  `json:"sign,omitempty"`
}

// MsgType defines the type of message to send.
type MsgType string

// Content holds the message content, supporting text or post formats.
type Content struct {
	Text string `json:"text,omitempty"`
	Post *Post  `json:"post,omitempty"`
}

// Post represents a rich post message with language-specific content.
type Post struct {
	Zh *Message `json:"zh_cn,omitempty"` // Chinese content
	En *Message `json:"en_us,omitempty"` // English content
}

// Message defines the structure of a post message.
type Message struct {
	Title   string   `json:"title"`
	Content [][]Item `json:"content"`
}

// Item represents a content element within a post message.
type Item struct {
	Tag  TagValue `json:"tag"`
	Text string   `json:"text,omitempty"`
	Link string   `json:"href,omitempty"`
}

// TagValue specifies the type of content item.
type TagValue string

// Response represents the API response from Lark.
type Response struct {
	Code int    `json:"code"`
	Msg  string `json:"msg"`
	Data any    `json:"data"`
}

// Constants for message types supported by Lark.
const (
	MsgTypeText MsgType = "text"
	MsgTypePost MsgType = "post"
)

// Constants for tag values supported by Lark.
//
//nolint:goconst // TagValueTextContent and MsgTypeText have same value but represent different concepts
const (
	TagValueTextContent TagValue = "text"
	TagValueLink        TagValue = "a"
)
