package rpc

import (
	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/apemanager"
	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc/client"
	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc/common"
)

const serviceAPEManager = frostfsServiceNamePrefix + "apemanager.APEManagerService"

const (
	rpcAPEManagerAddChain    = "AddChain"
	rpcAPEManagerRemoveChain = "RemoveChain"
	rpcAPEManagerListChains  = "ListChains"
)

func AddChain(
	cli *client.Client,
	req *apemanager.AddChainRequest,
	opts ...client.CallOption,
) (*apemanager.AddChainResponse, error) {
	resp := new(apemanager.AddChainResponse)

	err := client.SendUnary(cli, common.CallMethodInfoUnary(serviceAPEManager, rpcAPEManagerAddChain), req, resp, opts...)
	if err != nil {
		return nil, err
	}

	return resp, nil
}

func RemoveChain(
	cli *client.Client,
	req *apemanager.RemoveChainRequest,
	opts ...client.CallOption,
) (*apemanager.RemoveChainResponse, error) {
	resp := new(apemanager.RemoveChainResponse)

	err := client.SendUnary(cli, common.CallMethodInfoUnary(serviceAPEManager, rpcAPEManagerRemoveChain), req, resp, opts...)
	if err != nil {
		return nil, err
	}

	return resp, nil
}

func ListChains(
	cli *client.Client,
	req *apemanager.ListChainsRequest,
	opts ...client.CallOption,
) (*apemanager.ListChainsResponse, error) {
	resp := new(apemanager.ListChainsResponse)

	err := client.SendUnary(cli, common.CallMethodInfoUnary(serviceAPEManager, rpcAPEManagerListChains), req, resp, opts...)
	if err != nil {
		return nil, err
	}

	return resp, nil
}