package common import ( "time" "cloud.o-forge.io/core/oc-lib/models/common/pricing" "cloud.o-forge.io/core/oc-lib/tools" ) func GetPlannerNearestStart(start time.Time, planned map[tools.DataType]map[string]pricing.PricedItemITF) float64 { near := float64(-1) // unset sentinel for _, items := range planned { // loop through the planned items for _, priced := range items { // loop through the priced items if priced.GetLocationStart() == nil { // if the start is nil, continue // skip the iteration } newS := priced.GetLocationStart() // get the start diff := newS.Sub(start).Seconds() // get the difference if near < 0 || diff < near { // if the difference is less than the nearest start near = diff } } } if near < 0 { return 0 // no items found, start at the given start time } return near } // GetPlannerLongestTime returns the sum of all processing durations (conservative estimate). // Returns -1 if any processing is a service (open-ended). func GetPlannerLongestTime(planned map[tools.DataType]map[string]pricing.PricedItemITF) float64 { longestTime := float64(0) for _, priced := range planned[tools.PROCESSING_RESOURCE] { d := priced.GetExplicitDurationInS() if d < 0 { return -1 // service present: booking is open-ended } longestTime += d } return longestTime }