package store

// EffectiveBillingConfigInput describes the billing layers used by runtime and
// catalog responses. LegacyPlatformModelConfig is retained only as a fallback
// for models that do not have an effective pricing rule set.
type EffectiveBillingConfigInput struct {
	BaseConfig                map[string]any
	LegacyPlatformModelConfig map[string]any
	InheritedRuleSetConfig    map[string]any
	ModelRuleSetConfig        map[string]any
	Override                  map[string]any
}

// ResolveEffectiveBillingConfig keeps inherited pricing rules authoritative over
// the legacy materialized snapshot. Explicit model rules and overrides retain
// their higher-priority exception semantics.
func ResolveEffectiveBillingConfig(input EffectiveBillingConfigInput) map[string]any {
	config := mergeObjects(input.BaseConfig, nil)
	if len(input.InheritedRuleSetConfig) > 0 {
		// Rule sets are allowed to cover only a subset of resource types. Keep
		// base-model prices for resources that the inherited rule set does not
		// define, while letting the rule set remain authoritative for matching
		// top-level keys.
		config = mergeObjects(config, input.InheritedRuleSetConfig)
	} else if len(input.LegacyPlatformModelConfig) > 0 {
		config = mergeObjects(config, input.LegacyPlatformModelConfig)
	}
	if len(input.ModelRuleSetConfig) > 0 {
		config = mergeObjects(config, input.ModelRuleSetConfig)
	}
	return mergeObjects(config, input.Override)
}
