package costexplorer

import (
	"testing"
	"time"

	"github.com/pingcap/dbaas/billing2/db/entity"
	"github.com/shopspring/decimal"
	"github.com/stretchr/testify/require"
)

func TestSnapshotOverlayPlanLegacySegments(t *testing.T) {
	start := time.Date(2026, 7, 1, 0, 0, 0, 0, time.UTC)
	end := time.Date(2026, 7, 5, 0, 0, 0, 0, time.UTC)
	plan := &snapshotOverlayPlan{Segments: []snapshotOverlaySegment{
		{RunID: 10, Start: start.AddDate(0, 0, 1), End: start.AddDate(0, 0, 2)},
		{RunID: 11, Start: start.AddDate(0, 0, 3), End: start.AddDate(0, 0, 4)},
	}}

	legacy := plan.legacySegments(start, end)
	require.Equal(t, []snapshotOverlaySegment{
		{Start: start, End: start.AddDate(0, 0, 1)},
		{Start: start.AddDate(0, 0, 2), End: start.AddDate(0, 0, 3)},
	}, legacy)
}

func TestSnapshotOverlayCostMergerMergesAcrossSourceBoundaries(t *testing.T) {
	merger := newSnapshotOverlayCostMerger(true)
	merger.add(entity.UnitCostSummary{
		TenantID:       1,
		Unit:           "unit-a",
		Labels:         entity.Labels{"project": "p"},
		ConsumedSource: entity.ConsumedSource_Invoice,
		RawPrice:       decimal.RequireFromString("1.009"),
		CostPrice:      decimal.RequireFromString("1.009"),
		Cost:           1,
	})
	merger.add(entity.UnitCostSummary{
		TenantID:       1,
		Unit:           "unit-a",
		Labels:         entity.Labels{"project": "p"},
		ConsumedSource: entity.ConsumedSource_Invoice,
		RawPrice:       decimal.RequireFromString("2.009"),
		CostPrice:      decimal.RequireFromString("2.009"),
		Cost:           2,
	})

	costs := merger.costs()
	require.Len(t, costs, 1)
	require.True(t, decimal.RequireFromString("3.018").Equal(costs[0].RawPrice))
	require.Equal(t, 3, costs[0].Cost)
	require.Zero(t, costs[0].InvoiceID)
}
