package om

import (
	"errors"

	"git.simanc.com/software/golib/v4/features/sdb"
)

var (
	defaultDB *sdb.DB
)

var (
	errDefaultDbNotInit = errors.New("default db not init")
)

func Open(name string) error {
	db, err := sdb.Open(name)
	if err != nil {
		return err
	}
	defaultDB = db
	return nil
}

func Close() error {
	if defaultDB != nil {
		return nil
	}
	return defaultDB.Close()
}

func Table(name string) *ORM {
	if defaultDB == nil {
		panic(errDefaultDbNotInit)
	}
	return &ORM{TableName: name, DB: defaultDB}
}

func Exec(sql string, arg ...any) error {
	if defaultDB == nil {
		return errDefaultDbNotInit
	}
	return defaultDB.Exec(sql, arg...)
}

func PerformanceOptimization() error {
	if defaultDB == nil {
		return errDefaultDbNotInit
	}
	return sdb.PerformanceOptimization(defaultDB)
}

func EnableAutoClear(maxRow int, tables ...string) error {
	if defaultDB == nil {
		return errDefaultDbNotInit
	}
	return sdb.EnableAutoClear(defaultDB, maxRow, tables...)
}

func Query(sql string, arg ...any) ([]sdb.M, error) {
	if defaultDB == nil {
		return nil, errDefaultDbNotInit
	}
	return defaultDB.Query(sql, arg...)
}
