package i18n

import (
	"testing"
	"time"

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

func TestFormatAgo(t *testing.T) {
	svc, err := New()
	require.NoError(t, err)
	SetDefault(svc)

	tests := []struct {
		name     string
		count    int
		unit     string
		expected string
	}{
		{"1 second", 1, "second", "1 second ago"},
		{"5 seconds", 5, "second", "5 seconds ago"},
		{"1 minute", 1, "minute", "1 minute ago"},
		{"30 minutes", 30, "minute", "30 minutes ago"},
		{"1 hour", 1, "hour", "1 hour ago"},
		{"3 hours", 3, "hour", "3 hours ago"},
		{"1 day", 1, "day", "1 day ago"},
		{"7 days", 7, "day", "7 days ago"},
		{"1 week", 1, "week", "1 week ago"},
		{"2 weeks", 2, "week", "2 weeks ago"},
	}

	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			result := FormatAgo(tt.count, tt.unit)
			assert.Equal(t, tt.expected, result)
		})
	}
}

func TestTimeAgo(t *testing.T) {
	svc, err := New()
	require.NoError(t, err)
	SetDefault(svc)

	tests := []struct {
		name     string
		ago      time.Duration
		expected string
	}{
		{"just now", 30 * time.Second, "just now"},
		{"1 minute", 1 * time.Minute, "1 minute ago"},
		{"5 minutes", 5 * time.Minute, "5 minutes ago"},
		{"1 hour", 1 * time.Hour, "1 hour ago"},
		{"3 hours", 3 * time.Hour, "3 hours ago"},
		{"1 day", 24 * time.Hour, "1 day ago"},
		{"3 days", 3 * 24 * time.Hour, "3 days ago"},
		{"1 week", 7 * 24 * time.Hour, "1 week ago"},
		{"2 weeks", 14 * 24 * time.Hour, "2 weeks ago"},
	}

	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			result := TimeAgo(time.Now().Add(-tt.ago))
			assert.Equal(t, tt.expected, result)
		})
	}
}

func TestI18nAgoNamespace(t *testing.T) {
	svc, err := New()
	require.NoError(t, err)
	SetDefault(svc)

	t.Run("i18n.numeric.ago pattern", func(t *testing.T) {
		result := T("i18n.numeric.ago", 5, "minute")
		assert.Equal(t, "5 minutes ago", result)
	})

	t.Run("i18n.numeric.ago singular", func(t *testing.T) {
		result := T("i18n.numeric.ago", 1, "hour")
		assert.Equal(t, "1 hour ago", result)
	})
}
