package web

import (
	"html/template"
	"net/http"
	"net/http/httptest"
	"testing"

	"git.keks.cloud/kekskurse/miniauth/pkg/miniauth"
	"git.keks.cloud/kekskurse/miniauth/pkg/userstore"
	"github.com/gin-gonic/gin"
	"github.com/stretchr/testify/assert"
)

func TestRegistrationDisabled(t *testing.T) {
	webConfig := WebConfig{}
	webConfig.PublicRegistration = false

	us, err := userstore.NewDummyStore()
	assert.Nil(t, err, "[setup] should be abel to create userstore")
	web := NewWeb(webConfig, miniauth.NewMiniauth(us))

	router := gin.New()
	loadTemplates(router)
	grpup := router.Group("/web")
	web.RegisterRoutes(grpup)

	w := httptest.NewRecorder()
	req, _ := http.NewRequest("GET", "/web/register", nil)
	router.ServeHTTP(w, req)

	assert.Equal(t, 403, w.Code)
	content := string(w.Body.Bytes())
	assert.Contains(t, content, "Public registration disabled")
}

func TestRegistrationDisabledOnPost(t *testing.T) {
	webConfig := WebConfig{}
	webConfig.PublicRegistration = false

	us, err := userstore.NewDummyStore()
	assert.Nil(t, err, "[setup] should be abel to create userstore")
	web := NewWeb(webConfig, miniauth.NewMiniauth(us))

	router := gin.New()
	loadTemplates(router)
	grpup := router.Group("/web")
	web.RegisterRoutes(grpup)

	w := httptest.NewRecorder()
	req, _ := http.NewRequest("POST", "/web/register", nil)
	router.ServeHTTP(w, req)

	assert.Equal(t, 403, w.Code)
	content := string(w.Body.Bytes())
	assert.Contains(t, content, "Public registration disabled")
}

func loadTemplates(r *gin.Engine) {
	tmpl, err := template.ParseGlob("../../templates/*.html")
	if err != nil {
		panic(err) // Handle Fehler entsprechend
	}
	r.SetHTMLTemplate(tmpl)
}