package main

import (
	accountingGRPC "github.com/nspcc-dev/neofs-api-go/v2/accounting/grpc"
	"github.com/nspcc-dev/neofs-node/pkg/morph/client/balance/wrapper"
	accountingTransportGRPC "github.com/nspcc-dev/neofs-node/pkg/network/transport/accounting/grpc"
	accountingService "github.com/nspcc-dev/neofs-node/pkg/services/accounting"
	accounting "github.com/nspcc-dev/neofs-node/pkg/services/accounting/morph"
)

func initAccountingService(c *cfg) {
	if c.cfgMorph.client == nil {
		initMorphComponents(c)
	}

	balanceMorphWrapper, err := wrapper.NewFromMorph(c.cfgMorph.client, c.cfgAccounting.scriptHash, 0)
	fatalOnErr(err)

	accountingGRPC.RegisterAccountingServiceServer(c.cfgGRPC.server,
		accountingTransportGRPC.New(
			accountingService.NewSignService(
				c.key,
				accountingService.NewResponseService(
					accountingService.NewExecutionService(
						accounting.NewExecutor(balanceMorphWrapper),
					),
					c.respSvc,
				),
			),
		),
	)
}