package aws

import (
	"errors"

	"github.com/aws/aws-sdk-go-v2/aws"
	"github.com/aws/aws-sdk-go-v2/service/sns"
	snstypes "github.com/aws/aws-sdk-go-v2/service/sns/types"
	o11yv1 "github.com/tidbcloud/observability/api/regionalserver/resourceworker/v1"
)

const (
	SubscriptionPendingConfirmation = "PendingConfirmation"
)

func NewSnsClient(cfg aws.Config) SnsClient {
	return sns.NewFromConfig(cfg)
}

func IsSubscriptionNotFound(err error) bool {
	var nfe *snstypes.NotFoundException
	var rnfe *snstypes.ResourceNotFoundException
	return errors.As(err, &nfe) || errors.As(err, &rnfe)
}

func GenerateSubscribeInput(sub *o11yv1.Subscription, topicArn string) *sns.SubscribeInput {
	return &sns.SubscribeInput{
		Endpoint:              aws.String(sub.Spec.Endpoint),
		Protocol:              aws.String(string(sub.Spec.Protocol)),
		TopicArn:              aws.String(topicArn),
		ReturnSubscriptionArn: true,
	}
}
