package gosql

import (
	"fmt"

	"github.com/vladimirok5959/golang-sql/gosql/common"
	"github.com/vladimirok5959/golang-sql/gosql/engine"
)

type Row = common.Row

type Rows = common.Rows

type Tx = common.Tx

func Open(dbURL, migrationsDir string, skipMigration bool, debug bool) (common.Engine, error) {
	databaseURL, err := common.ParseUrl(dbURL)
	if err != nil {
		return nil, err
	}

	switch databaseURL.Scheme {
	case "mysql":
		return engine.NewMySQL(databaseURL, migrationsDir, skipMigration, debug)
	case "postgres", "postgresql":
		return engine.NewPostgreSQL(databaseURL, migrationsDir, skipMigration, debug)
	case "sqlite", "sqlite3":
		return engine.NewSQLite(databaseURL, migrationsDir, skipMigration, debug)
	default:
		return nil, fmt.Errorf("DB open error")
	}
}