package azuremonitor

import (
	"fmt"
	"strings"
)

// urlBuilder builds the URL for calling the Azure Monitor API
type urlBuilder struct {
	DefaultSubscription string
	Subscription        string
	ResourceGroup       string
	MetricDefinition    string
	ResourceName        string
}

// Build checks the metric definition property to see which form of the url
// should be returned
func (ub *urlBuilder) Build() string {
	subscription := ub.Subscription

	if ub.Subscription == "" {
		subscription = ub.DefaultSubscription
	}

	if strings.Count(ub.MetricDefinition, "/") > 1 {
		rn := strings.Split(ub.ResourceName, "/")
		lastIndex := strings.LastIndex(ub.MetricDefinition, "/")
		service := ub.MetricDefinition[lastIndex+1:]
		md := ub.MetricDefinition[0:lastIndex]
		return fmt.Sprintf("%s/resourceGroups/%s/providers/%s/%s/%s/%s/providers/microsoft.insights/metrics", subscription, ub.ResourceGroup, md, rn[0], service, rn[1])
	}

	return fmt.Sprintf("%s/resourceGroups/%s/providers/%s/%s/providers/microsoft.insights/metrics", subscription, ub.ResourceGroup, ub.MetricDefinition, ub.ResourceName)
}
