package oss

import "errors"

// 预定义错误
var (
	ErrFileNotFound      = errors.New("file not found")
	ErrInvalidCredential = errors.New("invalid credential")
	ErrAccessDenied      = errors.New("access denied")
	ErrInvalidParameter  = errors.New("invalid parameter")
	ErrNetworkError      = errors.New("network error")
	ErrTimeout           = errors.New("operation timeout")
)

// OSSError OSS 操作错误
type OSSError struct {
	Code    string // 错误代码
	Message string // 错误信息
	Err     error  // 底层错误
}

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

// Unwrap 支持错误包装
func (e *OSSError) Unwrap() error {
	return e.Err
}

// NewError 创建新的 OSS 错误
func NewError(code, message string, err error) *OSSError {
	return &OSSError{
		Code:    code,
		Message: message,
		Err:     err,
	}
}
