package s3

import (
	"context"
	"github.com/aws/aws-sdk-go-v2/aws"
	"github.com/aws/aws-sdk-go-v2/service/s3"
	"github.com/aws/aws-sdk-go-v2/service/s3/types"
	"github.com/samber/lo"
)

type ListBucketRes struct {
	CreatedAt int64
	Name      string
}

func (c *Client) ListBucket(ctx context.Context) ([]*ListBucketRes, error) {
	var (
		err   error
		input = &s3.ListBucketsInput{
			MaxBuckets: aws.Int32(100),
		}
		output *s3.ListBucketsOutput
	)

	if output, err = c.client.ListBuckets(ctx, input); err != nil {
		return nil, err
	}

	res := lo.Map(
		output.Buckets,
		func(item types.Bucket, index int) *ListBucketRes {
			return &ListBucketRes{CreatedAt: item.CreationDate.UnixMilli(), Name: *item.Name}
		},
	)

	return res, nil
}