package wait

import (
	"context"
	"errors"
	"fmt"
	"time"

	"github.com/aws/aws-sdk-go-v2/service/s3"
	"k8s.io/apimachinery/pkg/util/wait"
)

func WaitForS3DataCleaned(ctx context.Context, c *s3.Client, bucket, prefix string, timeout time.Duration) error {
	if err := wait.PollImmediate(poll, timeout, func() (bool, error) {
		res, err := c.ListObjectsV2(ctx, &s3.ListObjectsV2Input{
			Bucket: &bucket,
			Prefix: &prefix,
		})
		if err != nil {
			return false, err
		}
		if len(res.Contents) == 0 {
			return true, nil
		}

		return false, nil
	}); err != nil {
		if errors.Is(err, wait.ErrWaitTimeout) {
			return fmt.Errorf("wait for s3 objects(%s/%s/) clean timeout: %w", bucket, prefix, err)
		}

		return fmt.Errorf("can't wait for s3 objects(%s/%s/) clean, error : %w", bucket, prefix, err)
	}

	return nil
}
