package qq_message

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

// ReplyMessage 回复消息
type ReplyMessage struct {
	Type string           `json:"type"`
	Data ReplyMessageData `json:"data"`
}

type ReplyMessageData struct {
	ID int `json:"id"`
}

func init() {
	RegisterMessageType(TypeReply, func() QQMessage {
		return NewReplyMessage()
	})
}

func NewReplyMessage() *ReplyMessage {
	return &ReplyMessage{Type: TypeReply}
}

func (msg *ReplyMessage) GetMessageType() string {
	return TypeReply
}

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

func (msg *ReplyMessage) ToCQString() string {
	return fmt.Sprintf("[CQ:reply,id=%d]", msg.Data.ID)
}

func (msg *ReplyMessage) ParseMessage(data string) error {
	re := regexp.MustCompile(`\[CQ:reply,id=(\d+)\]`)
	matches := re.FindStringSubmatch(data)
	if len(matches) < 2 {
		return fmt.Errorf("回复消息格式不正确")
	}
	id := 0
	_, err := fmt.Sscanf(matches[1], "%d", &id)
	if err != nil {
		return fmt.Errorf("解析回复ID失败: %v", err)
	}
	msg.Data.ID = id
	return nil
}
