package briefing import ( "gitea.maximumdirect.net/eric/weatherreporter/internal/forecast" "gitea.maximumdirect.net/eric/weatherreporter/internal/module" ) type PrecipTimingModule struct { MaxPopPercent *int `json:"max_pop_percent,omitempty"` MaxPopTime string `json:"max_pop_time,omitempty"` ProbabilityThreshold float64 `json:"probability_threshold"` PrecipitationWindows []PrecipitationWindowModule `json:"precipitation_windows,omitempty"` ThunderMentioned bool `json:"thunder_mentioned"` } type PrecipitationWindowModule struct { PeriodBegins string `json:"period_begins"` PeriodBeginsHourLabel string `json:"period_begins_hour_label,omitempty"` PeriodEnds string `json:"period_ends,omitempty"` PeriodEndsHourLabel string `json:"period_ends_hour_label,omitempty"` MaxPopPercent *int `json:"max_pop_percent,omitempty"` MaxPopTime string `json:"max_pop_time,omitempty"` MaxPopHourLabel string `json:"max_pop_hour_label,omitempty"` } func buildPrecipTimingModule(ctx ModuleContext, _ any) (*module.Output, error) { value := precipTimingValue(ctx.Derived.PrecipTiming, ctx.Timezone) return &module.Output{ID: module.PrecipTiming, StanzaName: "precip_timing", Value: value}, nil } func precipTimingValue(timing forecast.PrecipTiming, timezone string) PrecipTimingModule { value := PrecipTimingModule{ ProbabilityThreshold: timing.ProbabilityThreshold, ThunderMentioned: timing.ThunderMentioned, } if timing.MaxPrecipitationProbability != nil { value.MaxPopPercent = roundedInt(&timing.MaxPrecipitationProbability.Value) value.MaxPopTime = clockLabel(timing.MaxPrecipitationProbability.Time, timezone) } for _, window := range timing.PrecipitationWindows { item := PrecipitationWindowModule{ PeriodBegins: friendlyDateTimeLabel(window.Start, timezone), PeriodBeginsHourLabel: hourMinuteLabel(window.Start, timezone), } if window.End != nil { item.PeriodEnds = friendlyDateTimeLabel(*window.End, timezone) item.PeriodEndsHourLabel = hourMinuteLabel(*window.End, timezone) } item.MaxPopPercent = roundedInt(&window.MaxPrecipitationProbability.Value) item.MaxPopTime = clockLabel(window.MaxPrecipitationProbability.Time, timezone) item.MaxPopHourLabel = hourMinuteLabel(window.MaxPrecipitationProbability.Time, timezone) value.PrecipitationWindows = append(value.PrecipitationWindows, item) } return value }