package app

import (
	"context"
	"io"
	"log/slog"
	"net/http"
	"testing"

	"github.com/stretchr/testify/require"

	"github.com/tidbcloud/AgentTeam/internal/store/app/webhooks"
)

func newSilentAppHandlerPanicTestLogger() *slog.Logger {
	return slog.New(slog.NewTextHandler(io.Discard, nil))
}

type panicProviderWebhookHandler struct{}

func (panicProviderWebhookHandler) HandleWebhook(context.Context, webhooks.AppDefinition, http.Header, []byte) (AppWebhookResult, error) {
	panic("webhook panic")
}

func TestSafeHandleProviderWebhookRecoversHandlerPanic(t *testing.T) {
	result, err := safeHandleProviderWebhook(
		context.Background(),
		newSilentAppHandlerPanicTestLogger(),
		panicProviderWebhookHandler{},
		webhooks.AppDefinition{AppSlug: "github"},
		nil,
		nil,
	)
	require.Equal(t, AppWebhookResult{}, result)
	require.ErrorIs(t, err, errAppHandlerPanic)
	require.EqualError(t, err, "app handler panic: webhook")
}
