package tfdyn

import (
	"context"
	"testing"

	"github.com/databricks/cli/bundle/config/resources"
	"github.com/databricks/cli/bundle/internal/tf/schema"
	"github.com/databricks/cli/libs/dyn"
	"github.com/databricks/cli/libs/dyn/convert"
	"github.com/databricks/databricks-sdk-go/service/ml"
	"github.com/stretchr/testify/assert"
	"github.com/stretchr/testify/require"
)

func TestConvertExperiment(t *testing.T) {
	var src = resources.MlflowExperiment{
		Experiment: &ml.Experiment{
			Name: "name",
		},
		Permissions: []resources.Permission{
			{
				Level:    "CAN_READ",
				UserName: "jane@doe.com",
			},
		},
	}

	vin, err := convert.FromTyped(src, dyn.NilValue)
	require.NoError(t, err)

	ctx := context.Background()
	out := schema.NewResources()
	err = experimentConverter{}.Convert(ctx, "my_experiment", vin, out)
	require.NoError(t, err)

	// Assert equality on the experiment
	assert.Equal(t, map[string]any{
		"name": "name",
	}, out.MlflowExperiment["my_experiment"])

	// Assert equality on the permissions
	assert.Equal(t, &schema.ResourcePermissions{
		ExperimentId: "${databricks_mlflow_experiment.my_experiment.id}",
		AccessControl: []schema.ResourcePermissionsAccessControl{
			{
				PermissionLevel: "CAN_READ",
				UserName:        "jane@doe.com",
			},
		},
	}, out.Permissions["mlflow_experiment_my_experiment"])
}