package oss

import (
	"context"
	"io"
	"time"
)

// OSSProvider 对象存储提供者接口
type OSSProvider interface {
	// Upload 上传文件
	Upload(ctx context.Context, key string, reader io.Reader, options *UploadOptions) (*UploadResult, error)

	// Download 下载文件
	Download(ctx context.Context, key string, writer io.Writer) error

	// Delete 删除文件
	Delete(ctx context.Context, key string) error

	// DeleteMultiple 批量删除文件
	DeleteMultiple(ctx context.Context, keys []string) (*DeleteResult, error)

	// GetFileInfo 获取文件信息
	GetFileInfo(ctx context.Context, key string) (*FileInfo, error)

	// ListFiles 列举文件
	ListFiles(ctx context.Context, options *ListOptions) (*ListResult, error)

	// GetSignedURL 获取预签名URL（用于私有文件分享）
	GetSignedURL(ctx context.Context, key string, expiresIn time.Duration) (string, error)

	// Copy 复制文件
	Copy(ctx context.Context, sourceKey, targetKey string) error

	// Move 移动/重命名文件
	Move(ctx context.Context, sourceKey, targetKey string) error

	// Exists 检查文件是否存在
	Exists(ctx context.Context, key string) (bool, error)

	// Close 关闭连接
	Close() error
}
