package util

import (
	"testing"

	"github.com/stretchr/testify/assert"
	corev1 "k8s.io/api/core/v1"
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	"sigs.k8s.io/controller-runtime/pkg/client"
)

func TestGetAnnotationWithDefault(t *testing.T) {
	tests := []struct {
		name   string
		obj    client.Object
		key    string
		defVal string
		want   string
	}{
		{
			name: "key exists",
			obj: &corev1.Pod{
				ObjectMeta: metav1.ObjectMeta{
					Annotations: map[string]string{"key": "value"},
				},
			},
			key:    "key",
			defVal: "default",
			want:   "value",
		},
		{
			name:   "key missing",
			obj:    &corev1.Pod{},
			key:    "key",
			defVal: "default",
			want:   "default",
		},
	}

	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			got := GetAnnotationWithDefault(tt.obj, tt.key, tt.defVal)
			assert.Equal(t, tt.want, got)
		})
	}
}

func TestSetAnnotationIfEmpty(t *testing.T) {
	tests := []struct {
		name   string
		obj    client.Object
		key    string
		defVal string
		want   string
	}{
		{
			name: "key exists",
			obj: &corev1.Pod{
				ObjectMeta: metav1.ObjectMeta{
					Annotations: map[string]string{"key": "value"},
				},
			},
			key:    "key",
			defVal: "default",
			want:   "value",
		},
		{
			name:   "key missing",
			obj:    &corev1.Pod{},
			key:    "key",
			defVal: "default",
			want:   "default",
		},
	}

	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			got := SetAnnotationIfEmpty(tt.obj, tt.key, tt.defVal)
			assert.Equal(t, tt.want, got)
		})
	}
}
