package wire

import (
	"reflect"
	"testing"
)

func TestMarshalJSON(t *testing.T) {
	tests := []struct {
		name string
		pt   *Point
		want string
	}{
		{
			"PointInt64",
			&Point{
				Value: PointInt64Value{
					Int64Value: 5,
				},
			},
			`{"int64Value":5}`,
		},
		{
			"PointDouble",
			&Point{
				Value: PointDoubleValue{
					DoubleValue: 3.14,
				},
			},
			`{"doubleValue":3.14}`,
		},
		{
			"PointDistribution",
			&Point{
				Value: PointDistributionValue{
					DistributionValue: &DistributionValue{
						Count: 3,
						Sum:   10,
						Buckets: []*Bucket{
							{
								Count: 1,
							},
							{
								Count: 2,
							},
						},
						BucketOptions: &BucketOptionsExplicit{
							Bounds: []float64{
								0, 5,
							},
						},
					},
				},
			},
			`{"distributionValue":{"count":3,"sum":10,"bucket_options":{"explicit":{"bounds":[0,5]}},"buckets":[{"count":1},{"count":2}]}}`,
		},
		{
			"nil point",
			nil,
			`null`,
		},
	}

	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			buf, err := tt.pt.MarshalJSON()
			if err != nil {
				t.Fatalf("Got:\n%v\nWant:\n%v", err, nil)
			}
			got := string(buf)
			if !reflect.DeepEqual(got, tt.want) {
				t.Fatalf("Got:\n%s\nWant:\n%s", got, tt.want)
			}
		})
	}
}
