package automation

import (
	"context"
	"strings"
	"time"
)

// FailRunAfterJobFailureWithMetadata marks a run failed and preserves stable
// failure metadata such as low-cardinality executor failure kinds.
func (s *Store) FailRunAfterJobFailureWithMetadata(ctx context.Context, workspaceID string, runID string, failedJobRunID string, message string, metadata map[string]any, now time.Time) (bool, error) {
	if err := s.ensureDB(); err != nil {
		return false, err
	}
	return s.failRunAfterJobFailure(ctx, workspaceID, runID, failedJobRunID, automationFailureMetadataJSON(message, metadata), now)
}

func automationFailureMetadataJSON(message string, metadata map[string]any) string {
	payload := make(map[string]any, len(metadata)+1)
	for key, value := range metadata {
		key = strings.TrimSpace(key)
		if key == "" || value == nil {
			continue
		}
		payload[key] = value
	}
	payload["message"] = strings.TrimSpace(message)
	return automationJSON(payload)
}
