package mongo

import (
	"Open_IM/pkg/common/config"
	server_api_params "Open_IM/pkg/proto/sdk_ws"
	"context"
	"fmt"
	"github.com/golang/protobuf/proto"
	"go.mongodb.org/mongo-driver/mongo"
	"gopkg.in/mgo.v2/bson"
	"time"
)

var (
	Client *mongo.Client
)

type MsgInfo struct {
	SendTime int64
	Msg      []byte
}

type UserChat struct {
	UID string
	Msg []MsgInfo
}

func GetUserAllChat(uid string) {
	ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second)
	collection := Client.Database(config.Config.Mongo.DBDatabase).Collection("msg")
	var userChatList []UserChat
	uid = uid + ":"
	filter := bson.M{"uid": bson.M{"$regex": uid}}
	//filter := bson.M{"uid": "17726378428:0"}
	result, err := collection.Find(context.Background(), filter)
	if err != nil {
		fmt.Println("find error", err.Error())
		return
	}
	if err := result.All(ctx, &userChatList); err != nil {
		fmt.Println(err.Error())
	}
	for _, userChat := range userChatList {
		for _, msg := range userChat.Msg {
			msgData := &server_api_params.MsgData{}
			err := proto.Unmarshal(msg.Msg, msgData)
			if err != nil {
				fmt.Println(err.Error(), msg)
				continue
			}
			fmt.Println("seq: ", msgData.Seq, "status: ", msgData.Status,
				"sendID: ", msgData.SendID, "recvID: ", msgData.RecvID,
				"sendTime: ", msgData.SendTime,
				"clientMsgID: ", msgData.ClientMsgID,
				"serverMsgID: ", msgData.ServerMsgID,
				"content: ", string(msgData.Content))
		}
	}
}