package morph

import (
	"fmt"

	commonCmd "git.frostfs.info/TrueCloudLab/frostfs-node/cmd/internal/common"
	"github.com/nspcc-dev/neo-go/pkg/crypto/keys"
	"github.com/nspcc-dev/neo-go/pkg/encoding/address"
	"github.com/nspcc-dev/neo-go/pkg/util"
	"github.com/spf13/cobra"
	"github.com/spf13/viper"
)

func getFrostfsIDAdmin(v *viper.Viper) (util.Uint160, bool, error) {
	admin := v.GetString(frostfsIDAdminConfigKey)
	if admin == "" {
		return util.Uint160{}, false, nil
	}

	h, err := address.StringToUint160(admin)
	if err == nil {
		return h, true, nil
	}

	h, err = util.Uint160DecodeStringLE(admin)
	if err == nil {
		return h, true, nil
	}

	pk, err := keys.NewPublicKeyFromString(admin)
	if err == nil {
		return pk.GetScriptHash(), true, nil
	}
	return util.Uint160{}, true, fmt.Errorf("frostfsid: admin is invalid: '%s'", admin)
}

func getFrostfsIDSubjectKey(cmd *cobra.Command) *keys.PublicKey {
	subjKeyHex, _ := cmd.Flags().GetString(subjectKeyFlag)
	subjKey, err := keys.NewPublicKeyFromString(subjKeyHex)
	commonCmd.ExitOnErr(cmd, "invalid subject key: %w", err)
	return subjKey
}

//func decodeFrostfsIDNamespaces(resStack []stackitem.Item) ([]string, error) {
//	var res []string
//
//	if len(resStack) == 0 {
//		return res, nil
//	}
//
//	if len(resStack) > 0 {
//		nodes, err := decodeNodeList(resStack[0])
//		if err != nil {
//			return nil, err
//		}
//
//		nm.SetNodes(nodes)
//	}
//
//}