package instance

import (
	"testing"
	"time"

	"github.com/stretchr/testify/require"
)

func TestOccurrenceKeySeparatesRefires(t *testing.T) {
	t.Parallel()

	first := time.Date(2026, 7, 23, 1, 2, 3, 0, time.UTC)
	second := first.Add(time.Hour)

	require.Equal(t, OccurrenceKey("abc", first), OccurrenceKey("abc", first))
	require.NotEqual(t, OccurrenceKey("abc", first), OccurrenceKey("abc", second))
	require.NotEqual(t, OccurrenceKey("abc", first), OccurrenceKey("def", first))
}

func TestClassifyObservation(t *testing.T) {
	t.Parallel()

	tests := []struct {
		name          string
		previousState string
		count         int
		status        string
		want          string
	}{
		{"first firing", StateUnknown, 0, StateFiring, ObservationFirstFiring},
		{"repeat firing", StateFiring, 1, StateFiring, ObservationRepeatFiring},
		{"refire same occurrence", StateResolved, 2, StateFiring, ObservationFirstFiring},
		{"resolved after firing", StateFiring, 3, StateResolved, ObservationResolved},
		{"first observed resolved", StateUnknown, 0, StateResolved, ObservationResolved},
	}
	for _, test := range tests {
		test := test
		t.Run(test.name, func(t *testing.T) {
			t.Parallel()
			require.Equal(t, test.want, classifyObservation(test.previousState, test.count, test.status))
		})
	}
}
