package middleware

import (
	model "github.com/cloudreve/Cloudreve/v3/models"
	"github.com/cloudreve/Cloudreve/v3/pkg/serializer"
	"github.com/gin-gonic/gin"
)

// ValidateSourceLink validates if the perm source link is a valid redirect link
func ValidateSourceLink() gin.HandlerFunc {
	return func(c *gin.Context) {
		linkID, ok := c.Get("object_id")
		if !ok {
			c.JSON(200, serializer.Err(serializer.CodeFileNotFound, "", nil))
			c.Abort()
			return
		}

		sourceLink, err := model.GetSourceLinkByID(linkID)
		if err != nil || sourceLink.File.ID == 0 || sourceLink.File.Name != c.Param("name") {
			c.JSON(200, serializer.Err(serializer.CodeFileNotFound, "", nil))
			c.Abort()
			return
		}

		sourceLink.Downloaded()
		c.Set("source_link", sourceLink)
		c.Next()
	}
}