package datasource

import (
	"database/sql"
	"regexp"

	"nms_nbi/lib/dborm"

	"xorm.io/xorm"
)

// 获取默认数据源
func DefaultDB() *xorm.Engine {
	return dborm.DbClient.XEngine
}

// RawDB 原生查询语句
func RawDB(source string, sql string, parameters []any) ([]map[string]any, error) {
	// 数据源
	db := DefaultDB()

	// 使用正则表达式替换连续的空白字符为单个空格
	fmtSql := regexp.MustCompile(`\s+`).ReplaceAllString(sql, " ")

	// log.Infof("sql=> %v", fmtSql)
	// log.Infof("parameters=> %v", parameters)

	// 查询结果
	var rows []map[string]any
	err := db.SQL(fmtSql, parameters...).Find(&rows)
	if err != nil {
		return nil, err
	}
	return rows, nil
}

// ExecDB 原生执行语句
func ExecDB(source string, sql string, parameters []any) (sql.Result, error) {
	// 数据源
	db := DefaultDB()

	// 使用正则表达式替换连续的空白字符为单个空格
	fmtSql := regexp.MustCompile(`\s+`).ReplaceAllString(sql, " ")
	// 执行结果
	res, err := db.Exec(append([]any{fmtSql}, parameters...)...)
	if err != nil {
		return nil, err
	}
	return res, err
}
