56 lines
2.5 KiB
Go
56 lines
2.5 KiB
Go
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
|
|
}
|