// package msg_net -- сетевые сообщения
package msg_net

import (
	"encoding/json"
	"fmt"

	"git.p78su.freemyip.com/svi/gostore/pkg/types"
)

// Читает значение из анонимного хранилища
type MsgFindRequest struct {
	Key_    string   `json:"key" form:"key"`    // Ключ для поиска в хранилище (запрос)
	Values_ []string `json:"values" form:"val"` // Ключи в хранилище по префиксу (ответ)
}

// NewFindRequest -- создание запроса на поиск
func NewFindRequest(key string) (types.IFindRequest, error) {
	if key == "" {
		return nil, fmt.Errorf("NewFindRequest(): key is empty")
	}
	sf := &MsgFindRequest{
		Key_:    key,
		Values_: []string{},
	}
	return sf, nil
}

// UnmarshalFindRequest -- десериализация
func UnmarshalFindRequest(key string, binData []byte) (types.IFindRequest, error) {
	sf := &MsgFindRequest{}
	err := json.Unmarshal(binData, sf)
	if err != nil {
		return nil, fmt.Errorf("Unmarshal(): in JSON decode, err=\n\t%w", err)
	}
	if sf.Key_ != key {
		return nil, fmt.Errorf("Unmarshal(): key mismatch(%q, key=%q)", sf.Key_, key)
	}
	return sf, nil
}

// Marshal -- сериализация
func (sf *MsgFindRequest) Marshal() []byte {
	binData, _ := json.MarshalIndent(sf, "", "  ")
	return binData
}

// Values -- возвращает список ключей по префиксу
func (sf *MsgFindRequest) Values() []string {
	return sf.Values_
}

// Key -- возвращает ключ запроса
func (sf *MsgFindRequest) Key() string {
	return sf.Key_
}
