package errs

import (
	"errors"

	"github.com/go-sql-driver/mysql"
	"gorm.io/gorm"

	tierrs "github.com/tidbcloud/tiinf/errs"
)

func WrapGORMError(err error, msg string) tierrs.Error {
	if err == nil {
		return nil
	}

	if errors.Is(err, tierrs.TiErr) {
		return err.(tierrs.Error)
	}

	if err == gorm.ErrRecordNotFound {
		return tierrs.NewNotFound(msg, err)
	} else {
		return tierrs.NewInternalDB(msg, err)
	}
}

func IsDuplicateEntryError(err error) bool {
	var mysqlErr *mysql.MySQLError
	if errors.As(err, &mysqlErr) {
		return mysqlErr.Number == 1062
	}
	return false
}
