package svc

import (
	"context"
	"juwan-backend/app/objectstory/rpc/internal/config"

	"github.com/aws/aws-sdk-go-v2/aws"
	awsConfig "github.com/aws/aws-sdk-go-v2/config"
	"github.com/aws/aws-sdk-go-v2/credentials"
	"github.com/aws/aws-sdk-go-v2/service/s3"
)

type ObjectStorageSvc struct {
	c config.S3ObjectConf
}

func NewObjectStorage(c config.S3ObjectConf) *ObjectStorageSvc {
	return &ObjectStorageSvc{
		c: c,
	}
}

func (s *ObjectStorageSvc) MustNews3Client(ctx context.Context) *s3.Client {
	awsCfg, err := awsConfig.LoadDefaultConfig(ctx,
		awsConfig.WithRegion(s.c.Region),
		awsConfig.WithCredentialsProvider(
			credentials.NewStaticCredentialsProvider(
				s.c.AccessKey,
				s.c.SecretKey,
				"",
			),
		),
	)
	if err != nil {
		panic(err)
	}

	return s3.NewFromConfig(awsCfg, func(o *s3.Options) {
		o.BaseEndpoint = aws.String(s.c.Endpoint)
		o.UsePathStyle = s.c.UsePathStyle
	})
}
