package db

import (
	"context"
	"log"
	"time"

	"go.mongodb.org/mongo-driver/v2/mongo"
	"go.mongodb.org/mongo-driver/v2/mongo/options"
	"go.mongodb.org/mongo-driver/v2/mongo/readpref"
)

var client *mongo.Client
var database *mongo.Database

func DBConnect(uri, dbName string) error {
	ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
	defer cancel()

	c, err := mongo.Connect(
		options.Client().
			ApplyURI(uri).
			SetBSONOptions(&options.BSONOptions{ObjectIDAsHexString: true}),
	)

	if err != nil {
		return err
	}

	if err := c.Ping(ctx, readpref.Primary()); err != nil {
		return err
	}

	client = c
	database = c.Database(dbName)
	log.Println("Database connection secured")
	return nil
}

func Database() *mongo.Database {
	return database
}

func Disconnect() {
	if client == nil {
		return
	}

	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
	defer cancel()
	if err := client.Disconnect(ctx); err != nil {
		log.Printf("Mongo DB disconnected %v \n", err)
	}
}
