package api

import (
	"net/http"
	"testing"

	"github.com/gin-gonic/gin"
	"github.com/stretchr/testify/require"
	"github.com/tidbcloud/aisupport/services/oncall/db"
	"github.com/tidbcloud/aisupport/services/oncall/models"
	"github.com/tidbcloud/aisupport/services/oncall/service"
)

func TestLegacyAndSharedRoutesUseTheSameAuthenticatedAPI(t *testing.T) {
	setupAPITestDB(t)
	t.Setenv("AUTH0_ENABLED", "true")
	t.Setenv("ALLOWED_EMAIL_DOMAINS", "pingcap.com")

	require.NoError(t, dbCreateTeam(models.Team{
		Name:        "route_alias_test",
		DisplayName: "Route Alias Test",
	}))
	serviceKey, _, err := service.CreateApiKey(
		"oncall-client@pingcap.com",
		"route-alias-test",
		models.ApiKeyTypeService,
		service.ScopeOncallRead,
	)
	require.NoError(t, err)

	r := gin.New()
	r.Use(AuthMiddleware())
	r.Use(ServiceKeyScopeGuard())
	RegisterRoutes(r)

	unauthenticated := doReq(r, http.MethodGet, "/api/v1/oncall/teams", "")
	require.Equal(t, http.StatusUnauthorized, unauthenticated.Code)

	legacy := doReq(r, http.MethodGet, "/api/v1/teams", serviceKey)
	shared := doReq(r, http.MethodGet, "/api/v1/oncall/teams", serviceKey)
	require.Equal(t, http.StatusOK, legacy.Code, legacy.Body.String())
	require.Equal(t, http.StatusOK, shared.Code, shared.Body.String())
	require.JSONEq(t, legacy.Body.String(), shared.Body.String())
}

func dbCreateTeam(team models.Team) error {
	return db.DB.Create(&team).Error
}
