package database

import (
	"fmt"
	"github.com/samber/lo"
	"github.com/spf13/viper"
	"strings"
)

func AllocDatabase(name string) (string, error) {
	// Disabled
	if Kdb == nil {
		return "host=localhost", fmt.Errorf("database feature is disabled")
	}

	var connString []string
	connString = strings.Split(viper.GetString("database.dsn"), " ")
	connString = lo.Filter(connString, func(item string, _ int) bool {
		return !strings.HasPrefix(item, "dbname=")
	})

	name = viper.GetString("database.prefix") + name

	var exists bool
	if err := Kdb.QueryRow("SELECT EXISTS(SELECT datname FROM pg_catalog.pg_database WHERE datname = $1)", name).Scan(&exists); err != nil {
		return strings.Join(connString, " "), nil
	}

	if !exists {
		_, err := Kdb.Exec("CREATE DATABASE " + name)
		if err != nil {
			return strings.Join(connString, " "), err
		}
	}

	connString = append(connString, "dbname="+name)

	return strings.Join(connString, " "), nil
}