package main

import (
	// External
	"git.gibonuddevalla.se/go/dbschema"
	"github.com/jmoiron/sqlx"
	_ "github.com/lib/pq"

	// Standard
	"fmt"
)

var (
	db *sqlx.DB
)

func sqlCallback(db string, version int) (sql []byte, found bool) { // {{{
	var err error
	fname := fmt.Sprintf("sql/%05d.sql", version)
	sql, err = SqlFS.ReadFile(fname)
	found = (err == nil)
	return
} // }}}
func logCallback(section, message string) { // {{{
	Log.Info("database", section, message)
} // }}}
func initDB() (err error) { // {{{
	dbConn := fmt.Sprintf(
		"host=%s port=%d user=%s password=%s dbname=%s sslmode=disable",
		config.Database.Host,
		config.Database.Port,
		config.Database.Username,
		config.Database.Password,
		config.Database.Db,
	)

	Log.Info(
		"database",
		"host", config.Database.Host,
		"port", config.Database.Port,
	)

	if db, err = sqlx.Connect("postgres", dbConn); err != nil {
		return
	}

	upgrader := dbschema.NewUpgrader()
	upgrader.SetSqlCallback(sqlCallback)
	upgrader.SetLogCallback(logCallback)
	_, err = upgrader.AddDatabase(
		config.Database.Host,
		config.Database.Port,
		config.Database.Db,
		config.Database.Username,
		config.Database.Password,
	)
	if err != nil {
		return
	}
	err = upgrader.Run()

	return
} // }}}
