package vm

import (
	"context"
	"fmt"
)

// 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 {
	Env         string
	TenantID    string
	ClusterID   string
	NextGen     bool
	NextGenHost bool
	Byoc        bool
}

func (vq *VMQuery) buildVMURL(ctx context.Context, 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

	if _, ok := vq.oldClusters[fmt.Sprintf("%s/%s", addrP.TenantID, addrP.ClusterID)]; ok {
		return fmt.Sprintf("http://vmselect-vmcluster.observability.svc.cluster.local:8481/select/2147483646:0/prometheus/api/v1/%s", path), nil
	}
	if addrP.NextGenHost {
		return fmt.Sprintf("http://vmselect-vmcluster.observability.svc.cluster.local:8481/select/multitenant/prometheus/api/v1/%s", path), nil
	}
	info, err := vq.mc.GetMetaInfo(ctx, addrP.Env, addrP.TenantID, addrP.ClusterID, addrP.NextGen, addrP.Byoc)
	if err != nil {
		return "", err
	}
	if info == nil {
		return "", fmt.Errorf("meta info not found")
	}
	if addrP.NextGen {
		return fmt.Sprintf("http://vmselect-vmcluster.observability.svc.cluster.local:8481/select/%d:%d/prometheus/api/v1/%s", info.VMAccountID, info.VMProjectID, path), nil
	}
	return fmt.Sprintf("http://vmselect-vmcluster.observability.svc.cluster.local:8481/select/%d:0/prometheus/api/v1/%s", info.VMAccountID, path), nil
}
