package config

import (
	"github.com/nspcc-dev/neo-go/pkg/encoding/fixedn"
	"github.com/spf13/viper"
)

// FeeConfig is an instance that returns extra fee values for contract
// invocations without notary support.
type FeeConfig struct {
	registerNamedCnr,
	mainchain,
	sidechain fixedn.Fixed8
}

// NewFeeConfig constructs FeeConfig from viper.Viper instance. Latter must not be nil.
//
// Fee for named container registration is taken from "fee.named_container_register" value.
func NewFeeConfig(v *viper.Viper) *FeeConfig {
	return &FeeConfig{
		registerNamedCnr: fixedn.Fixed8(v.GetInt64("fee.named_container_register")),
		mainchain:        fixedn.Fixed8(v.GetInt64("fee.main_chain")),
		sidechain:        fixedn.Fixed8(v.GetInt64("fee.side_chain")),
	}
}

func (f FeeConfig) MainChainFee() fixedn.Fixed8 {
	return f.mainchain
}

func (f FeeConfig) SideChainFee() fixedn.Fixed8 {
	return f.sidechain
}

// NamedContainerRegistrationFee returns additional GAS fee for named container registration in NeoFS network.
func (f FeeConfig) NamedContainerRegistrationFee() fixedn.Fixed8 {
	return f.registerNamedCnr
}