// Copyright (c) Mainflux
// SPDX-License-Identifier: Apache-2.0

package mongodb

import (
	"context"
	"fmt"

	"github.com/mainflux/mainflux/logger"
	"go.mongodb.org/mongo-driver/mongo"
	"go.mongodb.org/mongo-driver/mongo/options"
)

// Config defines the options that are used when connecting to a MongoDB instance
type Config struct {
	Host string
	Port string
	Name string
}

// Connect creates a connection to the MongoDB instance
func Connect(cfg Config, logger logger.Logger) (*mongo.Database, error) {
	addr := fmt.Sprintf("mongodb://%s:%s", cfg.Host, cfg.Port)
	client, err := mongo.Connect(context.Background(), options.Client().ApplyURI(addr))
	if err != nil {
		logger.Error(fmt.Sprintf("Failed to connect to database: %s", err))
		return nil, err
	}

	db := client.Database(cfg.Name)
	return db, nil
}
