package dbutil

import (
	"database/sql"
	errutil "tiloader/pkg/errutil"
	fileutil "tiloader/pkg/fileutil"
	log "tiloader/pkg/logutil"
)

func Insert(sql string, params []string, cfg fileutil.ConfigFile) (sql.Result, error) {
	db, err := GetDB(cfg)
	if err != nil {
		log.Error("prepare sql failed, err:" + err.Error())
		errutil.ErrCtl()
		return nil, err
	}

	args := make([]interface{}, len(params))

	for i := 0; i < len(params); i++ {
		args[i] = NewNullString(params[i])
	}
	defer db.Close()
	result, err := db.Exec(sql, args...)

	// for i := 0; i < len(params); i++ {
	// 	fmt.Printf("'%v',\n", params[i])
	// }
	if err != nil {
		log.Error("exec failed, err:" + err.Error() + "\nsql:" + sql + "\nparams:\n")
		errutil.ErrCtl()
		return nil, err
	}
	return result, nil
}

func NewNullString(s string) sql.NullString {
	if len(s) == 0 {
		return sql.NullString{}
	}
	return sql.NullString{
		String: s,
		Valid:  true,
	}
}
