package aws

import (
	"github.com/aws/aws-sdk-go/service/s3"
)

type MockS3Client struct {
	CreateMultipartUploadFunc func(input *s3.CreateMultipartUploadInput) (*s3.CreateMultipartUploadOutput, error)

	UploadPartFunc func(input *s3.UploadPartInput) (*s3.UploadPartOutput, error)

	CompleteMultipartUploadFunc func(input *s3.CompleteMultipartUploadInput) (*s3.CompleteMultipartUploadOutput, error)

	AbortMultipartUploadFunc func(input *s3.AbortMultipartUploadInput) (*s3.AbortMultipartUploadOutput, error)

	GetObjectFunc func(input *s3.GetObjectInput) (*s3.GetObjectOutput, error)

	HeaderObjectFunc func(input *s3.HeadObjectInput) (*s3.HeadObjectOutput, error)

	DeleteObjectFunc func(input *s3.DeleteObjectInput) (*s3.DeleteObjectOutput, error)
}

func (s *MockS3Client) CreateMultipartUpload(input *s3.CreateMultipartUploadInput) (*s3.CreateMultipartUploadOutput, error) {
	return s.CreateMultipartUploadFunc(input)
}

func (s *MockS3Client) UploadPart(input *s3.UploadPartInput) (*s3.UploadPartOutput, error) {
	return s.UploadPartFunc(input)
}

func (s *MockS3Client) CompleteMultipartUpload(input *s3.CompleteMultipartUploadInput) (*s3.CompleteMultipartUploadOutput, error) {
	return s.CompleteMultipartUploadFunc(input)
}

func (s *MockS3Client) AbortMultipartUpload(input *s3.AbortMultipartUploadInput) (*s3.AbortMultipartUploadOutput, error) {
	return s.AbortMultipartUploadFunc(input)
}

func (s *MockS3Client) GetObject(input *s3.GetObjectInput) (*s3.GetObjectOutput, error) {
	return s.GetObjectFunc(input)
}

func (s *MockS3Client) HeadObject(input *s3.HeadObjectInput) (*s3.HeadObjectOutput, error) {
	return s.HeaderObjectFunc(input)
}

func (s *MockS3Client) DeleteObject(input *s3.DeleteObjectInput) (*s3.DeleteObjectOutput, error) {
	return s.DeleteObjectFunc(input)
}
