package apemanager

import (
	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/ape"
	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/session"
)

type AddChainRequest struct {
	body *AddChainRequestBody

	session.RequestHeaders
}

func (r *AddChainRequest) SetBody(body *AddChainRequestBody) {
	r.body = body
}

func (r *AddChainRequest) GetBody() *AddChainRequestBody {
	return r.body
}

type AddChainRequestBody struct {
	target *ape.ChainTarget

	chain *ape.Chain
}

func (rb *AddChainRequestBody) SetTarget(target *ape.ChainTarget) {
	rb.target = target
}

func (rb *AddChainRequestBody) GetTarget() *ape.ChainTarget {
	return rb.target
}

func (rb *AddChainRequestBody) SetChain(chain *ape.Chain) {
	rb.chain = chain
}

func (rb *AddChainRequestBody) GetChain() *ape.Chain {
	return rb.chain
}

type AddChainResponse struct {
	body *AddChainResponseBody

	session.ResponseHeaders
}

func (r *AddChainResponse) SetBody(body *AddChainResponseBody) {
	r.body = body
}

func (r *AddChainResponse) GetBody() *AddChainResponseBody {
	return r.body
}

type AddChainResponseBody struct {
	chainID []byte
}

func (rb *AddChainResponseBody) SetChainID(chainID []byte) {
	rb.chainID = chainID
}

func (rb *AddChainResponseBody) GetChainID() []byte {
	return rb.chainID
}

type RemoveChainRequest struct {
	body *RemoveChainRequestBody

	session.RequestHeaders
}

func (r *RemoveChainRequest) SetBody(body *RemoveChainRequestBody) {
	r.body = body
}

func (r *RemoveChainRequest) GetBody() *RemoveChainRequestBody {
	return r.body
}

type RemoveChainRequestBody struct {
	target *ape.ChainTarget

	chainID []byte
}

func (rb *RemoveChainRequestBody) SetTarget(target *ape.ChainTarget) {
	rb.target = target
}

func (rb *RemoveChainRequestBody) GetTarget() *ape.ChainTarget {
	return rb.target
}

func (rb *RemoveChainRequestBody) SetChainID(chainID []byte) {
	rb.chainID = chainID
}

func (rb *RemoveChainRequestBody) GetChainID() []byte {
	return rb.chainID
}

type RemoveChainResponse struct {
	body *RemoveChainResponseBody

	session.ResponseHeaders
}

type RemoveChainResponseBody struct{}

func (r *RemoveChainResponse) SetBody(body *RemoveChainResponseBody) {
	r.body = body
}

func (r *RemoveChainResponse) GetBody() *RemoveChainResponseBody {
	return r.body
}

type ListChainsRequest struct {
	body *ListChainsRequestBody

	session.RequestHeaders
}

func (r *ListChainsRequest) SetBody(body *ListChainsRequestBody) {
	r.body = body
}

func (r *ListChainsRequest) GetBody() *ListChainsRequestBody {
	return r.body
}

type ListChainsRequestBody struct {
	target *ape.ChainTarget
}

func (rb *ListChainsRequestBody) SetTarget(target *ape.ChainTarget) {
	rb.target = target
}

func (rb *ListChainsRequestBody) GetTarget() *ape.ChainTarget {
	return rb.target
}

type ListChainsResponse struct {
	body *ListChainsResponseBody

	session.ResponseHeaders
}

func (r *ListChainsResponse) SetBody(body *ListChainsResponseBody) {
	r.body = body
}

func (r *ListChainsResponse) GetBody() *ListChainsResponseBody {
	return r.body
}

type ListChainsResponseBody struct {
	chains []*ape.Chain

	session.RequestHeaders
}

func (r *ListChainsResponseBody) SetChains(chains []*ape.Chain) {
	r.chains = chains
}

func (r *ListChainsResponseBody) GetChains() []*ape.Chain {
	return r.chains
}