package web

import (
	"fmt"
	"log"
	"net/http"
	"time"

	"github.com/gin-contrib/sessions"
	"github.com/gin-gonic/gin"

	"code.osinet.fr/fgm/sqs_demo/back/services/redriver"
)

func makePurgeHandler(rd redriver.Redriver) gin.HandlerFunc {
	return func(c *gin.Context) {
		ctx := c.Request.Context()
		qName := c.Param("name")
		redirect := "/queue/" + qName

		sess := sessions.Default(c)
		// Do not consume sess.Flashes(): this is a redirect-only handler, and they would be lost.
		defer func() {
			_ = sess.Save()
			c.Redirect(http.StatusSeeOther, redirect)
		}()

		t0 := time.Now()
		err := rd.Purge(ctx, qName)
		latency := time.Since(t0)
		if err != nil {
			log.Printf("failed purging queue %q: %v", qName, err)
			sess.AddFlash(fmt.Sprintf("Failed purging queue %q", qName))
			return
		}

		sess.AddFlash(fmt.Sprintf("Purged submitted for queue %s in %v", qName,
			latency))
		sess.AddFlash("The actual purge process takes up to 60 seconds, " +
			"so not be surprised if some messages are still visible on the queue messsages list." +
			"We recommend waiting for 60 seconds to refresh, regardless of your queue's size.")
	}
}