package o11y

import "fmt"

const (
	remoteWritePath = "api/v1/write"
	vmImportPath    = "topsql-vminsert"
	vmImportPathV2  = "api/v1/import"
	lokiPath        = "loki"
)

type WriteURLBuilder struct {
	dnsName string
}

func NewWriteURLBuilder(dnsName string) *WriteURLBuilder {
	return &WriteURLBuilder{dnsName: dnsName}
}

func (b *WriteURLBuilder) ForAWS() *builder {
	return &builder{address: b.dnsName}
}

func (b *WriteURLBuilder) ForGCP(endpointName string) *builder {
	return &builder{address: fmt.Sprintf("%s.%s", endpointName, b.dnsName)}
}

func (b *WriteURLBuilder) ForAzure() *builder {
	return &builder{address: b.dnsName}
}

type builder struct {
	address string
}

func (b *builder) BuildRemoteWrite(metricID string) string {
	return fmt.Sprintf("http://%s/%s/%s", b.address, metricID, remoteWritePath)
}

func (b *builder) BuildVMImport() string {
	return fmt.Sprintf("http://%s/%s", b.address, vmImportPath)
}

func (b *builder) BuildVMImportV2(metricsID string) string {
	return fmt.Sprintf("http://%s/%s/%s", b.address, metricsID, vmImportPathV2)
}

func (b *builder) BuildLoki() string {
	return fmt.Sprintf("http://%s/%s", b.address, lokiPath)
}
