package walletdatabase

import (
	"database/sql"

	"github.com/status-im/status-go/sqlite"
	"github.com/status-im/status-go/walletdatabase/migrations"
)

type DbInitializer struct {
}

func (a DbInitializer) Initialize(path, password string, kdfIterationsNumber int) (*sql.DB, error) {
	return InitializeDB(path, password, kdfIterationsNumber)
}

var walletCustomSteps = []*sqlite.PostStep{}

func doMigration(db *sql.DB) error {
	// Run all the new migrations
	return migrations.Migrate(db, walletCustomSteps)
}

// InitializeDB creates db file at a given path and applies migrations.
func InitializeDB(path, password string, kdfIterationsNumber int) (*sql.DB, error) {
	db, err := sqlite.OpenDB(path, password, kdfIterationsNumber)
	if err != nil {
		return nil, err
	}

	err = doMigration(db)
	if err != nil {
		return nil, err
	}

	return db, nil
}