package bob_box_utils

import "sort"

type ParcelDimensions struct {
	Height float64 `json:"height"`
	Width  float64 `json:"width"`
	Length float64 `json:"length"`
}

// GetStackedParcelDimensions sorts the parcels so and stacks them
func GetStackedParcelDimensions(parcels []ParcelDimensions) ParcelDimensions {
	var totalParcelHeight, maxParcelWidth, maxParcelLength float64
	// Stack the parcels
	for _, parcel := range parcels {
		parcelHeight, parcelWidth, parcelLength := SortDimensionsInIncreasingOrder(parcel.Height, parcel.Width, parcel.Length)

		// To stack, sum all the heights
		totalParcelHeight += parcelHeight

		// Get the max width
		if parcelWidth > maxParcelWidth {
			maxParcelWidth = parcelWidth
		}

		//Get the max length
		if parcelLength > maxParcelLength {
			maxParcelLength = parcelLength
		}
	}
	return ParcelDimensions{totalParcelHeight, maxParcelWidth, maxParcelLength}
}

// SortDimensionsInIncreasingOrder sorts the given dimensions in increasing order
func SortDimensionsInIncreasingOrder(dim1, dim2, dim3 float64) (float64, float64, float64) {
	dims := []float64{dim1, dim2, dim3}
	sort.Float64s(dims)
	return dims[0], dims[1], dims[2]
}