package db

import (
	"gopkg.in/mgo.v2"
	"log"
	"time"
)

var Mongo Driver

type Driver struct {
	Session *mgo.Session
	Info    DatabaseInfo
}

type DatabaseInfo struct {
	URL      string `json:"url"`
	Database string `json:"database"`
	Username string `json:"username,omitempty"`
	Password string `json:"password,omitempty"`
}

func Configure(d DatabaseInfo) {
	Mongo.Info = d
}

func (d *Driver) Connect() {
	// Connect to MongoDB
	s, err := mgo.DialWithTimeout(d.Info.URL, 5*time.Second)

	if err != nil {
		log.Println("MongoDB Driver Error", err)
		return
	}

	d.Session = s

	// Prevents these errors: read tcp 127.0.0.1:27017: i/o timeout
	d.Session.SetSocketTimeout(10 * time.Second)

	// Check if is alive
	if err = d.Session.Ping(); err != nil {
		log.Println("Database Error", err)
	}

	log.Println("Connected to database")
}

func (d *Driver) Connected() bool {
	if d.Session != nil {
		return true
	}
	return false
}
