package common

import (
	"context"
	"fmt"
	os_storage "go_dreamfactory/cmd/v2/lib/storage"

	"github.com/sirupsen/logrus"
	"go.mongodb.org/mongo-driver/mongo"
	"go.mongodb.org/mongo-driver/mongo/options"
)

type MogoTool struct {
	conf    *os_storage.Config
	storage os_storage.Storage
	db      *mongo.Database
	client  *mongo.Client
}

func NewMogoTool() *MogoTool {
	this := &MogoTool{}
	this.storage, _ = os_storage.NewOSStorage()
	var err error
	this.conf, err = this.storage.LoadConfig()
	if err != nil {
		logrus.Error(err)

	}

	return this
}

func (this *MogoTool) OpenConn() {
	if this.conf.MgoDB == nil {
		return
	}

	var option *options.ClientOptions
	if (this.conf.MgoDB.User == "" && this.conf.MgoDB.Password == "") &&
		this.conf.MgoDB.Host != "" && this.conf.MgoDB.Port != 0 && this.conf.MgoDB.Database != "" {
		option = options.Client().ApplyURI(fmt.Sprintf("mongodb://%s:%d", this.conf.MgoDB.Host, this.conf.MgoDB.Port))
	} else {
		option = options.Client().ApplyURI(fmt.Sprintf("mongodb://%s:%s@%s:%d", this.conf.MgoDB.User, this.conf.MgoDB.Password,
			this.conf.MgoDB.Host, this.conf.MgoDB.Port))
	}
	client, err := mongo.Connect(context.TODO(), option)
	if err != nil {
		logrus.Error(err)
		return
	}
	if err2 := client.Ping(context.TODO(), nil); err2 != nil {
		logrus.Error("Mongo连接失败", err2)
		return
	}
	this.db = client.Database(this.conf.MgoDB.Database)
	logrus.Info("mongo connect successful")
}
