package cost

import (
	"strings"

	"cloud.google.com/go/bigquery"
	"github.com/tidbcloud/cost-collect/pkg/global"
)

func gcpDataExtract(row map[string]bigquery.Value, request global.Request) (*global.Item, error) {
	item := global.Item{}
	labelsMap := extractLabels(row)
	err := global.Coverage(labelsMap, &item.Labels)
	if err != nil {
		return nil, err
	}
	err = global.Coverage(row, &item)
	if err != nil {
		return nil, err
	}

	// set time
	item.StartTime = request.StartTime
	item.EndTime = request.EndTime

	item.DataVersion = DataVersionV2
	// classify for biz flag
	if item.ServiceName == "Compute Engine" && strings.HasPrefix(item.Description, "Network") {
		item.ResourceType = global.CloudTypeNetwork

		// for resource subtype
		if strings.HasPrefix(item.Description, "Network Inter Zone") {
			// cross az
			item.ResourceSubtype = global.CloudNetworkSubTypeCrossZone
		} else if strings.HasPrefix(item.Description, "Network Inter Region") {
			// cross region
			item.ResourceSubtype = global.CloudNetworkSubTypeCrossRegion
		} else if strings.HasPrefix(item.Description, "Network Internet") {
			// internet
			item.ResourceSubtype = global.CloudNetworkSubTypeInternet
		} else if strings.HasPrefix(item.Description, "Network Load Balancing:") {
			// loadbalance process
			item.ResourceSubtype = global.CloudNetworkSubTypeLoadBalancer
		}
	}

	item.Labels.Provider = "gcp"
	item.Labels.UsedBy = "customer" //compatibility old tags,it use customer-tidb
	return &item, nil
}

func extractLabels(row map[string]bigquery.Value) map[string]bigquery.Value {
	kv := map[string]bigquery.Value{}
	labelPrefix := "user_label_"
	for k, v := range row {
		if strings.HasPrefix(k, labelPrefix) {
			kv[strings.TrimPrefix(k, labelPrefix)] = v
		}
	}
	return kv
}
