package impl

import (
	"time"

	"veyron/services/mgmt/lib/exec"
	"veyron/services/mgmt/node"

	"veyron2/mgmt"
	"veyron2/rt"
	"veyron2/vlog"
)

// InvokeCallback provides the parent node manager with the given name (which is
// expected to be this node manager's object name).
func InvokeCallback(name string) {
	handle, err := exec.GetChildHandle()
	switch err {
	case nil:
		// Node manager was started by self-update, notify the parent.
		callbackName, err := handle.Config.Get(mgmt.ParentNodeManagerConfigKey)
		if err != nil {
			vlog.Fatalf("Failed to get callback name from config: %v", err)
		}
		nmClient, err := node.BindConfig(callbackName)
		if err != nil {
			vlog.Fatalf("BindNode(%v) failed: %v", callbackName, err)
		}
		ctx, cancel := rt.R().NewContext().WithTimeout(time.Minute)
		defer cancel()
		if err := nmClient.Set(ctx, mgmt.ChildNodeManagerConfigKey, name); err != nil {
			vlog.Fatalf("Set(%v, %v) failed: %v", mgmt.ChildNodeManagerConfigKey, name, err)
		}
	case exec.ErrNoVersion:
	default:
		vlog.Fatalf("GetChildHandle() failed: %v", err)
	}
}
