package mutator

import (
	"context"

	"github.com/databricks/cli/bundle"
	"github.com/databricks/cli/libs/diag"
	"github.com/databricks/cli/libs/dyn"
)

type configureVolumeDefaults struct{}

func ConfigureVolumeDefaults() bundle.Mutator {
	return &configureVolumeDefaults{}
}

func (m *configureVolumeDefaults) Name() string {
	return "ConfigureVolumeDefaults"
}

func (m *configureVolumeDefaults) Apply(ctx context.Context, b *bundle.Bundle) diag.Diagnostics {
	var diags diag.Diagnostics

	pattern := dyn.NewPattern(
		dyn.Key("resources"),
		dyn.Key("volumes"),
		dyn.AnyKey(),
	)

	// Configure defaults for all volumes.
	err := b.Config.Mutate(func(v dyn.Value) (dyn.Value, error) {
		return dyn.MapByPattern(v, pattern, func(p dyn.Path, v dyn.Value) (dyn.Value, error) {
			var err error
			v, err = setIfNotExists(v, dyn.NewPath(dyn.Key("volume_type")), dyn.V("MANAGED"))
			if err != nil {
				return dyn.InvalidValue, err
			}
			return v, nil
		})
	})

	diags = diags.Extend(diag.FromErr(err))
	return diags
}