package robot

import (
	"bytes"
	"encoding/json"
	"fmt"
	"io"
	"net/http"
)

type DingTalkRobotMessage struct {
	ConversationID            string   `json:"conversationId"`            // 会话 ID
	AtUsers                   []AtUser `json:"atUsers"`                   // @ 的人列表
	ChatbotCorpID             string   `json:"chatbotCorpId"`             // 机器人企业 ID
	ChatbotUserID             string   `json:"chatbotUserId"`             // 机器人用户 ID
	MsgID                     string   `json:"msgId"`                     // 消息 ID
	SenderNick                string   `json:"senderNick"`                // 发送者昵称
	IsAdmin                   bool     `json:"isAdmin"`                   // 是否管理员
	SenderStaffID             string   `json:"senderStaffId"`             // 发送者员工 ID
	SessionWebhookExpiredTime int64    `json:"sessionWebhookExpiredTime"` // 会话 Webhook 过期时间（毫秒时间戳）
	CreateAt                  int64    `json:"createAt"`                  // 创建时间（毫秒时间戳）
	SenderCorpID              string   `json:"senderCorpId"`              // 发送者企业 ID
	ConversationType          string   `json:"conversationType"`          // 会话类型（1: 单聊，2: 群聊）
	SenderID                  string   `json:"senderId"`                  // 发送者 ID
	ConversationTitle         string   `json:"conversationTitle"`         // 会话标题
	IsInAtList                bool     `json:"isInAtList"`                // 是否在@列表中
	SessionWebhook            string   `json:"sessionWebhook"`            // 会话 Webhook
	Text                      Text     `json:"text"`                      // 消息
	MsgType                   string   `json:"msgtype"`                   // 消息类型
}

// AtUser @的用户信息
type AtUser struct {
	DingtalkID string `json:"dingtalkId"` // 钉钉 ID
	StaffID    string `json:"staffId"`    // 员工 ID
}

// 文本消息结构体
type Text struct {
	Content string `json:"content"` // 消息内容
}

type Markdown struct {
	Title string `json:"title"`
	Text  string `json:"text"`
}

// 钉钉回复消息的请求体结构体
type DingReplyMsg struct {
	MsgType  string   `json:"msgtype"`
	Text     Text     `json:"text"`
	Markdown Markdown `json:"markdown"`
}

func SendReplyMsg(webhookUrl string, reply DingReplyMsg) error {

	// 序列化为 JSON
	jsonData, err := json.Marshal(reply)
	if err != nil {
		return fmt.Errorf("序列化消息失败：%v", err)
	}

	// 发送 POST 请求
	resp, err := http.Post(
		webhookUrl,
		"application/json",
		bytes.NewBuffer(jsonData),
	)
	if err != nil {
		return fmt.Errorf("发送请求失败：%v", err)
	}
	defer resp.Body.Close()

	// 读取响应结果
	respBody, _ := io.ReadAll(resp.Body)
	fmt.Printf("钉钉回复接口响应：%s\n", string(respBody))

	return nil
}
