package cluster

import (
	"context"
	"fmt"
	"net/http"
	"net/http/httptest"
	"testing"
	"time"

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

// nolint: lll // just test data
var activeData = `
{"status":"success","data":{"resultType":"vector","result":[{"metric":{"instance":"127.0.0.1:10080","job":"tidb","type":"CreateTable"},"value":[1628661582.82,"1"]},{"metric":{"instance":"127.0.0.1:10080","job":"tidb","type":"Replace"},"value":[1628661582.82,"3"]},{"metric":{"instance":"127.0.0.1:10080","job":"tidb","type":"Select"},"value":[1628661582.82,"3"]},{"metric":{"instance":"127.0.0.1:10080","job":"tidb","type":"TruncateTable"},"value":[1628661582.82,"1"]},{"metric":{"instance":"127.0.0.1:10080","job":"tidb","type":"Use"},"value":[1628661582.82,"3"]}]}}
`

var notActiveData = `
{"status":"success","data":{"resultType":"vector","result":[]}}
`

// nolint: lll // just test data
var errorData = `
{"status":"error","errorType":"bad_data","error":"invalid parameter 'query': parse error at char 44: could not parse remaining input \"99\u003e0\"..."}
`

func TestActive(t *testing.T) {
	var data string
	endTime := time.Now()
	startTime := endTime.AddDate(0, 0, -1)

	ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		fmt.Fprintln(w, data)
	}))

	defer ts.Close()

	querier := newHTTPClientQueyer(&http.Client{}, ts.URL)

	data = errorData
	_, err := Active(context.Background(), querier, startTime, endTime)
	require.NotNil(t, err)

	data = activeData
	active, err := Active(context.Background(), querier, startTime, endTime)
	require.Nil(t, err)
	require.Equal(t, true, active)

	data = notActiveData
	active, err = Active(context.Background(), querier, startTime, endTime)
	require.Nil(t, err)
	require.Equal(t, false, active)
}
