package nns

import (
	client "git.frostfs.info/TrueCloudLab/frostfs-contract/rpcclient/nns"
	"git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-adm/internal/modules/morph/helper"
	commonCmd "git.frostfs.info/TrueCloudLab/frostfs-node/cmd/internal/common"
	"github.com/nspcc-dev/neo-go/pkg/rpcclient/management"
	"github.com/nspcc-dev/neo-go/pkg/util"
	"github.com/spf13/cobra"
	"github.com/spf13/viper"
)

func getRPCClient(cmd *cobra.Command) (*client.Contract, *helper.LocalActor, util.Uint160) {
	v := viper.GetViper()
	c, err := helper.GetN3Client(v)
	commonCmd.ExitOnErr(cmd, "unable to create NEO rpc client: %w", err)

	ac, err := helper.NewLocalActor(cmd, c)
	commonCmd.ExitOnErr(cmd, "can't create actor: %w", err)

	r := management.NewReader(ac.Invoker)
	nnsCs, err := r.GetContractByID(1)
	commonCmd.ExitOnErr(cmd, "can't get NNS contract state: %w", err)
	return client.New(ac, nnsCs.Hash), ac, nnsCs.Hash
}