package action import ( "github.com/cnachtigall/heatwave-autopilot/internal/heat" "github.com/cnachtigall/heatwave-autopilot/internal/risk" ) type Category string const ( Shading Category = "shading" Ventilation Category = "ventilation" InternalGains Category = "internal_gains" ACStrategy Category = "ac_strategy" Hydration Category = "hydration" Care Category = "care" ) type Effort string const ( EffortNone Effort = "none" EffortLow Effort = "low" EffortMedium Effort = "medium" EffortHigh Effort = "high" ) type Impact string const ( ImpactLow Impact = "low" ImpactMedium Impact = "medium" ImpactHigh Impact = "high" ) type TimeCondition struct { HourFrom int `yaml:"hour_from"` HourTo int `yaml:"hour_to"` MinTempC float64 `yaml:"min_temp_c"` MaxTempC float64 `yaml:"max_temp_c"` MinRisk string `yaml:"min_risk"` BudgetStatus string `yaml:"budget_status"` NightOnly bool `yaml:"night_only"` HighHumidity bool `yaml:"high_humidity"` } type Action struct { ID string `yaml:"id"` Name string `yaml:"name"` Description string `yaml:"description"` Category Category `yaml:"category"` Effort Effort `yaml:"effort"` Impact Impact `yaml:"impact"` When TimeCondition `yaml:"when"` DependsOn []string `yaml:"depends_on"` Toggles []string `yaml:"toggles"` } // HourContext holds the context for a specific hour used for action matching. type HourContext struct { Hour int TempC float64 HumidityPct float64 IsDay bool RiskLevel risk.RiskLevel BudgetStatus heat.BudgetStatus ActiveToggles map[string]bool }