package starmap

import (
	"b612.me/notify"
)

func (r *RemoteKv) dispatch(msg *notify.Message) {
	switch msg.Key {
	case "get":
		data, err := r.kvmap.Get(msg.Value.MustToInterface())
		msg.ReplyObj(kvMsg{
			Key:   msg.Value.MustToInterface(),
			Value: data,
			Err:   newStarMapErr(err),
		})
	case "delete":
		err := r.kvmap.Delete(msg.Value.MustToInterface())
		msg.ReplyObj(kvMsg{
			Key:   msg.Value.MustToInterface(),
			Value: nil,
			Err:   newStarMapErr(err),
		})
	case "exists":
		ext := r.kvmap.Exists(msg.Value.MustToInterface())
		msg.ReplyObj(kvMsg{
			Key:   msg.Value.MustToInterface(),
			Value: ext,
			Err:   newStarMapErr(nil),
		})
	case "store":
		ext := msg.Value.MustToInterface().(kvMsg)
		err := r.kvmap.Store(ext.Key, ext.Value)
		msg.ReplyObj(kvMsg{
			Key:   msg.Value.MustToInterface(),
			Value: nil,
			Err:   newStarMapErr(err),
		})
	}
}
