diff --git a/msp/changeover.go b/msp/changeover.go index 24a735a..50d2a8a 100644 --- a/msp/changeover.go +++ b/msp/changeover.go @@ -1,6 +1,7 @@ package msp import ( + "fmt" "sort" "time" ) @@ -58,3 +59,26 @@ func FlattenPeriods(periods ...Period) (ids []string) { } return } + +func GenerateTimeline(periods ...Period) (out []string) { + periodsByID := make(map[string]Period) + ids := FlattenPeriods(periods...) + for _, val := range periods { + id := val.GetIdentifier() + periodsByID[id] = val + } + start := periodsByID[ids[0]].GetStartTime() + for _, val := range ids { + next, err := GetNextChangeOver(start, periods...) + if err == nil { + if next.Equal(periodsByID[val].GetStartTime()) { + start = periodsByID[val].GetStartTime() + next = periodsByID[val].GetEndTime() + } + frame := fmt.Sprintf("%s\t%s\t%s\n", val, start, next) + out = append(out, frame) + start = next + } + } + return out +}