package simulation

import (
	"fmt"
	"math/rand"

	"github.com/cosmos/cosmos-sdk/x/simulation"

	"github.com/kava-labs/kava/x/auction/types"
)

// ParamChanges defines the parameters that can be modified by param change proposals
// on the simulation
func ParamChanges(r *rand.Rand) []simulation.ParamChange {
	// Note: params are encoded to JSON before being stored in the param store. These param changes
	// update the raw values in the store so values need to be JSON. This is why values that are represented
	// as strings in JSON (such as time.Duration) have the escaped quotes.
	// TODO should we encode the values properly with ModuleCdc.MustMarshalJSON()?
	return []simulation.ParamChange{
		simulation.NewSimParamChange(types.ModuleName, string(types.KeyBidDuration),
			func(r *rand.Rand) string {
				return fmt.Sprintf("%d", GenBidDuration(r))
			},
		),
		simulation.NewSimParamChange(types.ModuleName, string(types.KeyMaxAuctionDuration),
			func(r *rand.Rand) string {
				return fmt.Sprintf("%d", GenMaxAuctionDuration(r))
			},
		),
		simulation.NewSimParamChange(types.ModuleName, string(types.KeyIncrementCollateral),
			func(r *rand.Rand) string {
				return fmt.Sprintf("%d", GenIncrementCollateral(r))
			},
		),
		simulation.NewSimParamChange(types.ModuleName, string(types.KeyIncrementDebt),
			func(r *rand.Rand) string {
				return fmt.Sprintf("%d", GenIncrementDebt(r))
			},
		),
		simulation.NewSimParamChange(types.ModuleName, string(types.KeyIncrementSurplus),
			func(r *rand.Rand) string {
				return fmt.Sprintf("%d", GenIncrementSurplus(r))
			},
		),
	}
}