package util

import (
	"database/sql"
	"fmt"

	"github.com/juju/errors"
	//"github.com/ngaut/log"
)

// DBConfig is the DB configuration.
type DBConfig struct {
	Host string `toml:"host" json:"host"`

	User string `toml:"user" json:"user"`

	Password string `toml:"password" json:"password"`

	Name string `toml:"name" json:"name"`

	Port int `toml:"port" json:"port"`
}

func (c *DBConfig) String() string {
	if c == nil {
		return "<nil>"
	}
	return fmt.Sprintf("DBConfig(%+v)", *c)
}

// CreateDB create a mysql fd
func CreateDB(cfg DBConfig) (*sql.DB, error) {
	createDBSql := "create database if not exists test"
	// dont't have test database
	dbDSN := fmt.Sprintf("%s:%s@tcp(%s:%d)/mysql?charset=utf8", cfg.User, cfg.Password, cfg.Host, cfg.Port)
	db, err := sql.Open("mysql", dbDSN)
	if err != nil {
		return nil, errors.Trace(err)
	}

	_, err = db.Exec(createDBSql)
	if err != nil {
		return nil, errors.Trace(err)
	}

	dbDSN = fmt.Sprintf("%s:%s@tcp(%s:%d)/test?charset=utf8", cfg.User, cfg.Password, cfg.Host, cfg.Port)
	db, err = sql.Open("mysql", dbDSN)
	if err != nil {
		return nil, errors.Trace(err)
	}

	return db, nil
}

// CloseDB close the mysql fd
func CloseDB(db *sql.DB) error {
	return errors.Trace(db.Close())
}
