package vm

import (
	"bytes"
	"text/template"
)

// devAddrTmp     = template.Must(template.New("dev-addr").Parse(devAddr))
// stagingAddrTmp = template.Must(template.New("staging-addr").Parse(stagingAddr))
// prodAddrTmp    = template.Must(template.New("prod-addr").Parse(prodAddr))

var addrTmp = template.Must(template.New("prod-addr").Parse(addr))

const (
	// ref: https://pingcap.feishu.cn/wiki/wikcnCR04NM82DuvZMvzHb9b8Pd
	// devAddr     = "http://www.ds.{{ .Region }}.{{ .Provider }}.observability-dev.pingcap.cloud/internal/topsql-vmselect/select/{{ .ClusterID }}/prometheus/api/v1/"
	// stagingAddr = "http://www.ds.{{ .Region }}.{{ .Provider }}.observability-staging.pingcap.cloud/internal/topsql-vmselect/select/{{ .ClusterID }}/prometheus/api/v1/"
	// prodAddr    = "http://www.ds.{{ .Region }}.{{ .Provider }}.observability.tidbcloud.com/internal/topsql-vmselect/select/{{ .ClusterID }}/prometheus/api/v1/"

	addr = "http://www.ds.{{ .Region }}.{{ .Provider }}.observability.tidbcloud.com/internal/topsql-vmselect/select/{{ .ClusterID }}/prometheus/api/v1/"

	pathQuery      = "query"
	pathQueryRange = "query_range"
)

type addrParams struct {
	Provider  string
	Region    string
	ClusterID uint64
}

func (vq *VMQuery) buildVMURL(addrP *addrParams, path string) (string, error) {
	buf := bytes.NewBuffer(nil)
	if err := vq.addrTmp.Execute(buf, addrP); err != nil {
		return "", err
	}
	return buf.String() + path, nil
}
