package awsquota

import (
	"context"
	"strings"

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

const (
	globalRegion       = "us-east-1"
	s3ServiceCode      = "s3"
	s3QuotaCode        = "L-DC2B2D3D"
	s3QuotaDescription = "The number of Amazon S3 general purpose buckets"
)

func (c *quotaClient) queryS3Quotas(ctx context.Context) []Quota {
	output, err := c.s3Client.ListBuckets(ctx, &s3.ListBucketsInput{})
	if err != nil {
		c.logger.Error(err, "failed to list buckets")
		return nil
	}
	usage := len(output.Buckets)
	if usage == 0 {
		c.logger.Info("no S3 buckets")
		return nil
	}

	limit, err := c.getServiceQuotaLimitValue(ctx, globalRegion, s3ServiceCode, s3QuotaCode)
	if err != nil {
		c.logger.Error(err, "failed to get s3 quota limit")
		return nil
	}
	return []Quota{
		{
			Region:   globalRegion,
			Service:  strings.ToUpper(s3ServiceCode),
			Resource: s3QuotaDescription,
			Limit:    limit,
			Usage:    float64(usage),
		},
	}
}
