package report import ( "fmt" "gitea.maximumdirect.net/eric/weatherreporter/internal/module" "gitea.maximumdirect.net/eric/weatherreporter/internal/timeutil" ) func dailyDefinition() Definition { return Definition{ ID: Daily, Name: "Daily Report", PromptID: "weather.daily_generated_text", GenerationMode: GenerationModeGeneratedTextTemplate, TemplateID: "daily", GeneratedTextSchemaID: "daily", ComparisonStrategy: CompareSameValidDate, ArtifactGroup: "daily", BatchOutputName: "daily.md", DistributorPathTemplates: []string{ "daily/{valid_start_date}/{run_id}.md", "daily/{valid_start_date}/index.md", }, Generated: true, CompatiblePriorIDs: []ID{Daily}, Modules: dailyModules(), resolve: resolveDaily, runIDDisambiguator: validStartDateRunIDDisambiguator, } } func dailyModules() []module.ConfigItem { return moduleItems( module.Metadata, module.CurrentConditions, module.NarrativeForecast, module.DerivedDailySummary, module.DerivedDaypartSummaries, module.PrecipTiming, module.AlertDigest, module.SPCConvectiveOutlooks, module.AreaForecastDiscussion, module.SPCConvectiveDiscussion, module.WeatherStory, module.OutdoorWindows, module.DailyPlanning, module.HourlyForecast, ) } func resolveDaily(req ResolveRequest) (timeutil.Period, error) { if req.Date.IsZero() { return timeutil.Period{}, fmt.Errorf("daily report requires an explicit date") } return timeutil.CivilDay(req.Date, req.Location), nil } func validStartDateRunIDDisambiguator(resolved Resolved) string { if resolved.ValidPeriod.Start.IsZero() { return "" } location, err := timeutil.LoadLocation(resolved.Timezone) if err != nil { return resolved.ValidPeriod.Start.Format(timeutil.DateLayout) } return resolved.ValidPeriod.Start.In(location).Format(timeutil.DateLayout) }