package users

import (
	"time"
	"ttime/internal/types"

	"github.com/gofiber/fiber/v2"
	"github.com/gofiber/fiber/v2/log"
	"github.com/golang-jwt/jwt/v5"
)

// LoginRenew is a simple handler that renews the token
// @Summary		LoginRenews
// @Description	renews the users token
// @Security		bererToken
// @Tags			User
// @Accept			json
// @Produce		plain
// @Success		200	Token		types.Token	"Successfully signed token for user"
// @Failure		401	{string}	string		"Unauthorized"
// @Failure		500	{string}	string		"Internal server error"
// @Router			/loginerenew [post]
func LoginRenew(c *fiber.Ctx) error {
	user := c.Locals("user").(*jwt.Token)

	log.Info("Renewing token for user:", user.Claims.(jwt.MapClaims)["name"])

	claims := user.Claims.(jwt.MapClaims)
	claims["exp"] = time.Now().Add(time.Hour * 72).Unix()
	renewed := jwt.MapClaims{
		"name":  claims["name"],
		"admin": claims["admin"],
		"exp":   claims["exp"],
	}
	token := jwt.NewWithClaims(jwt.SigningMethodHS256, renewed)
	t, err := token.SignedString([]byte("secret"))
	if err != nil {
		log.Warn("Error signing token")
		return c.SendStatus(fiber.StatusInternalServerError)
	}

	log.Info("Successfully renewed token for user:", user.Claims.(jwt.MapClaims)["name"])
	return c.JSON(types.Token{Token: t})
}