package install

import (
	"fmt"

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

var adapters = make(map[string]InstallAdapter)

type InstallAdapter interface {
	Name() string
	DefaultPort() string
	SetConfig(dbHost string, dbUsername string, dbPassword string, dbName string, 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(),'','127.0.0.1'")
	if err != nil {
		return err
	}

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