// monorepo/cloud/maplefile-backend/pkg/storage/object/s3/config.go
package s3

type S3ObjectStorageConfigurationProvider interface {
	GetAccessKey() string
	GetSecretKey() string
	GetEndpoint() string
	GetRegion() string
	GetBucketName() string
	GetIsPublicBucket() bool
	GetUsePathStyle() bool
}

type s3ObjectStorageConfigurationProviderImpl struct {
	accessKey      string `env:"AWS_ACCESS_KEY,required"`
	secretKey      string `env:"AWS_SECRET_KEY,required"`
	endpoint       string `env:"AWS_ENDPOINT,required"`
	region         string `env:"AWS_REGION,required"`
	bucketName     string `env:"AWS_BUCKET_NAME,required"`
	isPublicBucket bool   `env:"AWS_IS_PUBLIC_BUCKET"`
	usePathStyle   bool   `env:"AWS_USE_PATH_STYLE"`
}

func NewS3ObjectStorageConfigurationProvider(accessKey, secretKey, endpoint, region, bucketName string, isPublicBucket, usePathStyle bool) S3ObjectStorageConfigurationProvider {
	return &s3ObjectStorageConfigurationProviderImpl{
		accessKey:      accessKey,
		secretKey:      secretKey,
		endpoint:       endpoint,
		region:         region,
		bucketName:     bucketName,
		isPublicBucket: isPublicBucket,
		usePathStyle:   usePathStyle,
	}
}

func (me *s3ObjectStorageConfigurationProviderImpl) GetAccessKey() string {
	return me.accessKey
}

func (me *s3ObjectStorageConfigurationProviderImpl) GetSecretKey() string {
	return me.secretKey
}

func (me *s3ObjectStorageConfigurationProviderImpl) GetEndpoint() string {
	return me.endpoint
}

func (me *s3ObjectStorageConfigurationProviderImpl) GetRegion() string {
	return me.region
}

func (me *s3ObjectStorageConfigurationProviderImpl) GetBucketName() string {
	return me.bucketName
}

func (me *s3ObjectStorageConfigurationProviderImpl) GetIsPublicBucket() bool {
	return me.isPublicBucket
}

func (me *s3ObjectStorageConfigurationProviderImpl) GetUsePathStyle() bool {
	return me.usePathStyle
}
