package api

import (
	"io"
	"net/http"

	"github.com/gin-gonic/gin"
	"github.com/pingcap/log"
	"github.com/rakyll/statik/fs"
	"go.uber.org/zap"
)

func RegisterForbiddenMiddleware(engine *gin.Engine) {
	statikFS, err := fs.NewWithNamespace("portal")
	if err != nil {
		log.Fatal("failed to embed static files into your binary", zap.Error(err))
	}
	r, err := statikFS.Open("/403.html")
	if err != nil {
		log.Fatal("failed to embed 403 page into your binary", zap.Error(err))
	}
	defer func() {
		if err := r.Close(); err != nil {
			log.Error("statik http file close failed", zap.Error(err))
		}
	}()

	contents, err := io.ReadAll(r)
	if err != nil {
		log.Fatal("failed to embed 403 page into your binary", zap.Error(err))
	}

	engine.Use(func(c *gin.Context) {
		c.Next()

		if c.Writer.Status() != http.StatusForbidden {
			return
		}

		c.Data(http.StatusForbidden, "text/html; charset=utf-8", contents)
	})
}
