// Copyright (C) The Arvados Authors. All rights reserved.
//
// SPDX-License-Identifier: AGPL-3.0

package cloud

import (
	"sort"
)

// NormalizePriceHistory de-duplicates and sorts instance prices, most
// recent first.
func NormalizePriceHistory(prices []InstancePrice) []InstancePrice {
	// copy provided slice instead of modifying it in place
	prices = append([]InstancePrice(nil), prices...)
	// sort by timestamp, newest first
	sort.Slice(prices, func(i, j int) bool {
		return prices[i].StartTime.After(prices[j].StartTime)
	})
	// remove duplicate data points, keeping the oldest
	for i := 0; i < len(prices)-1; i++ {
		if prices[i].StartTime == prices[i+1].StartTime || prices[i].Price == prices[i+1].Price {
			prices = append(prices[:i], prices[i+1:]...)
			i--
		}
	}
	return prices
}