package terraform

import (
	"fmt"
	"strings"

	"github.com/databricks/cli/bundle"
	"github.com/databricks/cli/bundle/config/interpolation"
)

// Rewrite variable references to resources into Terraform compatible format.
func interpolateTerraformResourceIdentifiers(path string, lookup map[string]string) (string, error) {
	parts := strings.Split(path, interpolation.Delimiter)
	if parts[0] == "resources" {
		switch parts[1] {
		case "pipelines":
			path = strings.Join(append([]string{"databricks_pipeline"}, parts[2:]...), interpolation.Delimiter)
			return fmt.Sprintf("${%s}", path), nil
		case "jobs":
			path = strings.Join(append([]string{"databricks_job"}, parts[2:]...), interpolation.Delimiter)
			return fmt.Sprintf("${%s}", path), nil
		case "models":
			path = strings.Join(append([]string{"databricks_mlflow_model"}, parts[2:]...), interpolation.Delimiter)
			return fmt.Sprintf("${%s}", path), nil
		case "experiments":
			path = strings.Join(append([]string{"databricks_mlflow_experiment"}, parts[2:]...), interpolation.Delimiter)
			return fmt.Sprintf("${%s}", path), nil
		case "model_serving_endpoints":
			path = strings.Join(append([]string{"databricks_model_serving"}, parts[2:]...), interpolation.Delimiter)
			return fmt.Sprintf("${%s}", path), nil
		case "registered_models":
			path = strings.Join(append([]string{"databricks_registered_model"}, parts[2:]...), interpolation.Delimiter)
			return fmt.Sprintf("${%s}", path), nil
		default:
			panic("TODO: " + parts[1])
		}
	}

	return interpolation.DefaultLookup(path, lookup)
}

func Interpolate() bundle.Mutator {
	return interpolation.Interpolate(interpolateTerraformResourceIdentifiers)
}
