package install

import (
	"fmt"

	qgen "github.com/Azareal/Gosora/query_gen"
)

var adapters = make(map[string]InstallAdapter)

type InstallAdapter interface {
	Name() string
	DefaultPort() string
	SetConfig(dbHost, dbUsername, dbPassword, dbName, dbPort string)
	InitDatabase() error
	TableDefs() error
	InitialData() error
	CreateAdmin() error

	DBHost() string
	DBUsername() string
	DBPassword() string
	DBName() string
	DBPort() string
}

func Lookup(name string) (InstallAdapter, bool) {
	adap, ok := adapters[name]
	return adap, ok
}

func createAdmin() error {
	fmt.Println("Creating the admin user")
	hashedPassword, salt, err := BcryptGeneratePassword("password")
	if err != nil {
		return err
	}

	// Build the admin user query
	adminUserStmt, err := qgen.Builder.SimpleInsert("users", "name, password, salt, email, group, is_super_admin, active, createdAt, lastActiveAt, lastLiked, oldestItemLikedCreatedAt, message, last_ip", "'Admin',?,?,'admin@localhost',1,1,1,UTC_TIMESTAMP(),UTC_TIMESTAMP(),UTC_TIMESTAMP(),UTC_TIMESTAMP(),'',''")
	if err != nil {
		return err
	}

	// Run the admin user query
	_, err = adminUserStmt.Exec(hashedPassword, salt)
	return err
}