package regionalapi

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

	"github.com/stretchr/testify/assert"
	"github.com/tidbcloud/observability/pkg/common/constants"
	"github.com/tidbcloud/observability/pkg/common/errors"
	"github.com/tidbcloud/observability/pkg/resourcemanager"
	"github.com/tidbcloud/observability/test/mockresourcemanager"
	"go.uber.org/mock/gomock"
)

func TestListClusterExternalAlerts(t *testing.T) {
	ctrl := gomock.NewController(t)
	defer ctrl.Finish()

	clusterRW := mockresourcemanager.NewMockClusterReaderWriter(ctrl)
	resourcemanager.MockClusterReaderWriter(clusterRW)
	clusterRW.EXPECT().QueryClusters(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(nil, errors.New(errors.ParameterInvalid, "")).Times(1)
	w := httptest.NewRecorder()

	t.Run(
		"bad request", func(t *testing.T) {
			req, _ := http.NewRequest("GET", "/api/v1/external/tidbcloud/orgs/1/projects/1/clusters/1/alerts?vendor=aws&region=us-west-2", nil)
			req.Header.Set(constants.AuthorizationHeader, fmt.Sprintf("%s %s", constants.BearerPrefix, stsToken))
			testEngine.ServeHTTP(w, req)

			assert.Equal(t, http.StatusBadRequest, w.Code)
		},
	)

	t.Run(
		"invalid params", func(t *testing.T) {
			req, _ := http.NewRequest("GET", "/api/v1/external/tidbcloud/orgs/1/projects/1/clusters/1/alerts?vendor=aws&region=us-west-2&status=Closed&startTime=1678172841&endTime=1678072841", nil)
			req.Header.Set(constants.AuthorizationHeader, fmt.Sprintf("%s %s", constants.BearerPrefix, stsToken))
			testEngine.ServeHTTP(w, req)

			assert.Contains(t, w.Body.String(), "Invalid params")
			assert.Equal(t, http.StatusBadRequest, w.Code)
		},
	)
}
