package registry

// RuntimeCapabilityViewFromManifest decodes the full pinned runtime
// capability projection from a stored manifest payload. An empty payload or
// an unsupported capability yields (nil, nil); a corrupt payload fails
// closed with an error.
func RuntimeCapabilityViewFromManifest(manifestJSON []byte) (*AppRuntimeCapabilityView, error) {
	capability, err := ParseStoredAppRuntimeCapability(manifestJSON)
	if err != nil {
		return nil, err
	}
	if !capability.Supported {
		return nil, nil
	}
	var notifications *AppNotificationCapabilityView
	if capability.Notifications.Supported {
		notifications = &AppNotificationCapabilityView{
			Targets: capability.Notifications.Targets,
			Content: capability.Notifications.Content,
		}
	}
	return &AppRuntimeCapabilityView{
		Supported:        true,
		Transports:       capability.Transports,
		DefaultTransport: capability.DefaultTransport,
		Events:           capability.Events,
		Scopes:           capability.Scopes,
		Notifications:    notifications,
		ConfigSchema:     capability.ConfigSchema,
	}, nil
}
