package gcp

import (
	"context"

	"github.com/pingcap/dbaas/central/config"
	"github.com/pingcap/dbaas/pkg/infra/provider/gcp/auth"
	"github.com/pingcap/errors"
	"google.golang.org/api/dns/v1"
)

// ChangeResourceRecordSet create a resource record set that routes traffic for custom private DNS name
func ChangeResourceRecordSet(phzID string, rb *dns.Change) error {
	opts, err := auth.DefaultClientOptions()
	if err != nil {
		return err
	}
	ctx := context.Background()
	dnsService, err := dns.NewService(ctx, opts...)
	if err != nil {
		return errors.Annotate(err, "create dns service")
	}

	_, err = dnsService.Changes.Create(config.Global().InfraConfig.GcpProject, phzID, rb).Context(ctx).Do()
	if err != nil {
		return errors.Annotate(err, "add dns record")
	}

	return nil
}

func AddRecordSet(phzID, customDNSName, elbAddress string) error {
	rset := &dns.ResourceRecordSet{
		Name: customDNSName,
		Type: "A",
		Rrdatas: []string{
			elbAddress,
		},
	}
	rb := &dns.Change{
		Additions: []*dns.ResourceRecordSet{rset},
	}

	return ChangeResourceRecordSet(phzID, rb)
}
