package cron

import (
	"fmt"
	"os"
	"time"

	pbconversation "github.com/openimsdk/protocol/conversation"
	"github.com/openimsdk/tools/log"
	"github.com/openimsdk/tools/mcontext"
)

func (c *cronServer) clearUserMsg() {
	now := time.Now()
	operationID := fmt.Sprintf("cron_user_msg_%d_%d", os.Getpid(), now.UnixMilli())
	ctx := mcontext.SetOperationID(c.ctx, operationID)
	log.ZDebug(ctx, "clear user msg cron start")
	const (
		deleteCount = 10000
		deleteLimit = 100
	)
	var count int
	for i := 1; i <= deleteCount; i++ {
		resp, err := c.conversationClient.ClearUserConversationMsg(ctx, &pbconversation.ClearUserConversationMsgReq{Timestamp: now.UnixMilli(), Limit: deleteLimit})
		if err != nil {
			log.ZError(ctx, "ClearUserConversationMsg failed.", err)
			return
		}
		count += int(resp.Count)
		if resp.Count < deleteLimit {
			break
		}
	}
	log.ZDebug(ctx, "clear user msg cron task completed", "cont", time.Since(now), "count", count)
}