package middleware

import (
	"github.com/gin-gonic/gin"
	"github.com/google/uuid"
)

// requestIDHeader 请求 ID 响应头名称
const requestIDHeader = "X-Request-Id"

// requestIDContextKey context 中存储请求 ID 的键
const requestIDContextKey = "request_id"

// RequestID 注入请求 ID 中间件。
// 从 X-Request-Id 头读取，无则生成 uuid，写入 context 与响应头。
func RequestID() gin.HandlerFunc {
	return func(c *gin.Context) {
		rid := c.GetHeader(requestIDHeader)
		if rid == "" {
			// 02-architecture-design.md §4.6：req-<uuid-v4> 格式
			rid = "req-" + uuid.New().String()
		}
		c.Set(requestIDContextKey, rid)
		c.Writer.Header().Set(requestIDHeader, rid)
		c.Next()
	}
}
