package errors

import stdErrors "errors"

var (
	// ErrInvalidDataSource 无效的数据源
	ErrInvalidDataSource = stdErrors.New("invalid data source")

	// ErrUnsupportedVendor 不支持的云厂商
	ErrUnsupportedVendor = stdErrors.New("unsupported vendor")

	// ErrUnsupportedRegion 不支持的 Region
	ErrUnsupportedRegion = stdErrors.New("unsupported region")

	// ErrInvalidSQL 无效的 SQL
	ErrInvalidSQL = stdErrors.New("invalid SQL")

	// ErrQueryTimeout 查询超时
	ErrQueryTimeout = stdErrors.New("query timeout")

	// ErrQueryFailed 查询失败
	ErrQueryFailed = stdErrors.New("query failed")

	// ErrEngineUnavailable 引擎不可用
	ErrEngineUnavailable = stdErrors.New("engine unavailable")

	// ErrDialectNotSupported 不支持的方言
	ErrDialectNotSupported = stdErrors.New("dialect not supported")
)

// DataProxyError Data Proxy 错误
type DataProxyError struct {
	Code    string // 错误码
	Message string // 错误消息
	Err     error  // 原始错误
}

// Error 实现 error 接口
func (e *DataProxyError) Error() string {
	if e.Err != nil {
		return e.Code + ": " + e.Message + " - " + e.Err.Error()
	}
	return e.Code + ": " + e.Message
}

// Unwrap 返回原始错误
func (e *DataProxyError) Unwrap() error {
	return e.Err
}

// NewDataProxyError 创建 Data Proxy 错误
func NewDataProxyError(code, message string, err error) *DataProxyError {
	return &DataProxyError{
		Code:    code,
		Message: message,
		Err:     err,
	}
}
