package claimpolicy

import (
	"strings"
	"testing"
	"time"
)

func TestFailureRetryDelay(t *testing.T) {
	tests := []struct {
		failureCount int
		want         time.Duration
	}{
		{failureCount: 1, want: 5 * time.Second},
		{failureCount: 2, want: 30 * time.Second},
		{failureCount: 3, want: 2 * time.Minute},
		{failureCount: 4, want: 5 * time.Minute},
		{failureCount: 5, want: 15 * time.Minute},
	}
	for _, tt := range tests {
		if got := FailureRetryDelay(tt.failureCount); got != tt.want {
			t.Fatalf("FailureRetryDelay(%d) = %v, want %v", tt.failureCount, got, tt.want)
		}
	}
}

func TestBuildEventOrderingGuardKeepsDeliveryAndSourceLaneFences(t *testing.T) {
	now := time.Date(2026, 7, 17, 0, 0, 0, 0, time.UTC)
	query, args := BuildEventOrderingGuard(now)
	for _, required := range []string{
		"b.DeliveryId = e.DeliveryId",
		"b.DeliverySequence < e.DeliverySequence",
		"b.SourceLaneKey = e.SourceLaneKey",
		"b.NextAttemptAt <= ?",
		"JSON_EXTRACT(e.Payload, '$.objectKind')",
	} {
		if !strings.Contains(query, required) {
			t.Fatalf("ordering guard missing %q", required)
		}
	}
	if len(args) != 2 || args[0] != now || args[1] != now {
		t.Fatalf("ordering args = %#v, want [now now]", args)
	}
}
