package billing

import (
	"strconv"
	"strings"
	"time"

	"github.com/google/uuid"
)

// costIDNamespace is a drive9-specific UUID namespace for billing CostIDs.
// Generated once as uuid.Must(uuid.NewRandom()) — it must never change, since
// consumers deduplicate on CostID.
var costIDNamespace = uuid.MustParse("7c9c6a2e-4f3b-4e1a-9d5c-2b8a6f0e1d47")

// CostID returns the stable dedup key for one billing bucket:
// UUIDv5(org + unit + period_start + provider + region + dimensions).
// SQS standard queues are at-least-once, so consumers dedupe on this value.
func CostID(orgID uint64, unit string, periodStart time.Time, provider, region string, dimensions ...string) string {
	parts := []string{
		strconv.FormatUint(orgID, 10),
		unit,
		periodStart.UTC().Format(time.RFC3339),
		provider,
		region,
	}
	parts = append(parts, dimensions...)
	return uuid.NewSHA1(costIDNamespace, []byte(strings.Join(parts, "|"))).String()
}
