package variable

import (
	"context"
	"fmt"

	"github.com/databricks/databricks-sdk-go"
	"github.com/databricks/databricks-sdk-go/service/settings"
)

type resolveNotificationDestination struct {
	name string
}

func (l resolveNotificationDestination) Resolve(ctx context.Context, w *databricks.WorkspaceClient) (string, error) {
	result, err := w.NotificationDestinations.ListAll(ctx, settings.ListNotificationDestinationsRequest{
		// The default page size for this API is 20.
		// We use a higher value to make fewer API calls.
		PageSize: 200,
	})
	if err != nil {
		return "", err
	}

	// Collect all notification destinations with the given name.
	var entities []settings.ListNotificationDestinationsResult
	for _, entity := range result {
		if entity.DisplayName == l.name {
			entities = append(entities, entity)
		}
	}

	// Return the ID of the first matching notification destination.
	switch len(entities) {
	case 0:
		return "", fmt.Errorf("notification destination named %q does not exist", l.name)
	case 1:
		return entities[0].Id, nil
	default:
		return "", fmt.Errorf("there are %d instances of clusters named %q", len(entities), l.name)
	}
}

func (l resolveNotificationDestination) String() string {
	return fmt.Sprintf("notification-destination: %s", l.name)
}
