package payment

import (
	"testing"
	"time"

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

func TestParseRecalculateWindowNormalizesDateRange(t *testing.T) {
	start, end, err := parseRecalculateWindow("2026-06-22", "2026-06-22")
	require.NoError(t, err)
	require.Equal(t, time.Date(2026, 6, 22, 0, 0, 0, 0, time.UTC), start)
	require.Equal(t, time.Date(2026, 6, 23, 0, 0, 0, 0, time.UTC), end)

	start, end, err = parseRecalculateWindow("2026-06-22", "2026-06-24")
	require.NoError(t, err)
	require.Equal(t, time.Date(2026, 6, 22, 0, 0, 0, 0, time.UTC), start)
	require.Equal(t, time.Date(2026, 6, 25, 0, 0, 0, 0, time.UTC), end)
}

func TestParseRecalculateWindowRejectsTimestampInput(t *testing.T) {
	_, _, err := parseRecalculateWindow("2026-06-22T00:00:00Z", "2026-06-24")
	require.Error(t, err)
	require.Contains(t, err.Error(), "invalid start_date")
}

func TestSplitRecalculateRangeByMonthWithInclusiveEndDateWindow(t *testing.T) {
	start, end, err := parseRecalculateWindow("2026-06-30", "2026-07-01")
	require.NoError(t, err)
	windows := splitRecalculateRangeByMonth(start, end)
	require.Len(t, windows, 2)
	require.Equal(t, time.Date(2026, 6, 30, 0, 0, 0, 0, time.UTC), windows[0].Start)
	require.Equal(t, time.Date(2026, 7, 1, 0, 0, 0, 0, time.UTC), windows[0].End)
	require.Equal(t, time.Date(2026, 7, 1, 0, 0, 0, 0, time.UTC), windows[1].Start)
	require.Equal(t, time.Date(2026, 7, 2, 0, 0, 0, 0, time.UTC), windows[1].End)
}
