package qq_message

import (
	"encoding/json"
	"fmt"
	"regexp"
)

// AtMessage @消息
type AtMessage struct {
	Type string        `json:"type"`
	Data AtMessageData `json:"data"`
}

type AtMessageData struct {
	QQ string `json:"qq"` // QQ号，"all"表示@全体成员
}

func init() {
	RegisterMessageType(TypeAt, func() QQMessage {
		return NewAtMessage()
	})
}

func NewAtMessage() *AtMessage {
	return &AtMessage{Type: TypeAt}
}

func (msg *AtMessage) GetMessageType() string {
	return TypeAt
}

func (msg *AtMessage) SetData(data json.RawMessage) error {
	return json.Unmarshal(data, &msg.Data)
}

func (msg *AtMessage) ToCQString() string {
	return fmt.Sprintf("[CQ:at,qq=%s]", msg.Data.QQ)
}

func (msg *AtMessage) ParseMessage(data string) error {
	re := regexp.MustCompile(`\[CQ:at,qq=(\d+|all)\]`)
	matches := re.FindStringSubmatch(data)
	if len(matches) < 2 {
		return fmt.Errorf("@消息格式不正确")
	}
	msg.Data.QQ = matches[1]
	return nil
}
