// Package service -----------------------------
// @file      : chat.go
// @author    : JJXu
// @contact   : wavingbear@163.com
// @time      : 2025/6/13 19:04
// -------------------------------------------
package logic

import (
	"context"
	"errors"
	"fmt"
	"fonchain-fiee/api/accountFiee"
	"fonchain-fiee/pkg/common/ws"
	"fonchain-fiee/pkg/service"
	"fonchain-fiee/pkg/service/asChat/chatCache"
	"fonchain-fiee/pkg/service/asChat/consts"
	"fonchain-fiee/pkg/service/asChat/dto"
	"go.uber.org/zap"
	"log"
)

func NewMessage(ctx context.Context, cache *chatCache.ChatCache, chatUser *accountFiee.ChatUserData, request dto.NewMessageRequest) (err error) {
	if request.SessionId == "" {
		return errors.New("sessionId不能为空")
	}
	if request.MsgType == 0 {
		return errors.New("msgType不能为空")
	}
	fmt.Println("NewMessage 1111111111111111111111111111111")
	fmt.Println("NewMessage 22222222222222222222222222222222222")
	//存储入库
	if chatUser.NickName == "" {
		chatUser.NickName = fmt.Sprintf("未知用户(%d)", chatUser.ID)
	}
	fmt.Println("NewMessage 3333333333333333333333333333333333")
	var data = accountFiee.ChatRecordData{
		SessionId:  request.SessionId,
		UserId:     chatUser.ID,
		Name:       chatUser.NickName,
		Avatar:     "",
		MsgType:    request.MsgType,
		Content:    request.Message.Text,
		LocalStamp: request.LocalStamp,
		Medias:     nil,
	}
	if len(request.Message.Media) > 0 {
		for _, media := range request.Message.Media {
			data.Medias = append(data.Medias, &accountFiee.ChatMediaData{
				ID: media.MediaId,
			})
		}
	}
	fmt.Println("NewMessage 4444444444444444444444444444444444")
	resp, err := service.AccountFieeProvider.CreateChatRecord(ctx, &data)
	if err != nil {
		return errors.New("消息发送失败")
	}
	fmt.Printf("CreateChatRecord resp:%+v\n", resp)
	//录入缓存
	err = cache.AddChatRecord(request.SessionId, resp.Data)
	if err != nil {
		log.Printf("cache.AddChatRecord 失败:%v", err)
		return errors.New("消息发送失败")
	}
	fmt.Println("NewMessage 5 消息数量+1")
	//新消息数量统计+1
	noticeUserId := consts.ChatRoom.GetUserIdInSession(request.SessionId, chatUser.ID)
	fmt.Println("NewMessage 5.1 消息数量配置结束")
	fmt.Printf("noticeUserId %+v\n", noticeUserId)
	for _, userId := range noticeUserId {
		fmt.Println("userId")
		cache.IncreaseNewMessageTotal(userId, request.SessionId)
	}
	fmt.Println("NewMessage 6")
	//发送websocket消息提醒通知
	var notice = dto.MessageListType{}
	notice.BuildMessage(resp.Data)
	fmt.Printf("ws消息提醒:%+v\n", notice)
	_, err = consts.ChatRoom.SendSessionMessage(chatUser, request.SessionId, ws.NewChatMsgType, notice)
	if err != nil {
		log.Print("发送新消息通知失败", zap.Error(err), zap.Any("notice", notice))
	}
	fmt.Println("NewMessage 7 -end")
	return nil
}