// Package middleware ...
//
// Description : middleware ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 2026-01-04 10:17
package middleware

import (
	"net/http"
	"time"

	"github.com/gin-contrib/timeout"
	"github.com/gin-gonic/gin"
)

// Timeout 超时处理中间件
func Timeout(ttl int64) func(ctx *gin.Context) {
	if ttl <= 0 {
		// 未设置超时
		return func(ctx *gin.Context) {
			ctx.Next()
		}
	}
	// 设置超时中间件, 单位: ms
	return timeout.New(
		timeout.WithTimeout(time.Duration(ttl)*time.Millisecond),
		timeout.WithResponse(func(ctx *gin.Context) {
			ctx.JSON(http.StatusRequestTimeout, gin.H{"code": http.StatusRequestTimeout, "msg": "请求超时"})
			ctx.Abort()
		}),
	)
}
