package mongo

import (
	"context"
	"time"

	log "github.com/sirupsen/logrus"
	"go.mongodb.org/mongo-driver/mongo"
	"go.mongodb.org/mongo-driver/mongo/options"
	serverconfig "krakatoa.net/backend/modules/configs/serverConfig"
	"krakatoa.net/backend/modules/logger"
)

var MongoClient *mongo.Client

var PlayersCollection *mongo.Collection

func getConnectionURI() string {
	cfg := serverconfig.Cfg.MongoDB

	return "mongodb://" + cfg.Username + ":" + cfg.Password + "@" + cfg.Hostname + ":" + cfg.Port + "/?maxPoolSize=20&w=majority&authSource=" + cfg.Database
}

func InitDatabase() {
	var err error

	MongoClient, err = mongo.NewClient(options.Client().ApplyURI(getConnectionURI()))

	if err != nil {
		log.Fatal(err)
	}

	ctx, _ := context.WithTimeout(context.Background(), 10*time.Second)

	err = MongoClient.Connect(ctx)

	if err != nil {
		logger.Mongo.Fatal(err)
	}

	db := MongoClient.Database(serverconfig.Cfg.MongoDB.Database)

	PlayersCollection = db.Collection("players")

	logger.Mongo.Info("Connected")
}
