package middleware

import (
	"context"

	"security-center-backend/internal/service/jwt"
)

// agentClaimsContextKey 是 agent claims 在请求上下文中的私有 key, 避免与外部包冲突。
type agentClaimsContextKey struct{}

// WithAgentClaims 把认证通过的 agent claims 注入请求上下文 (plan 002 §3.2)。
// 仅 AgentAuth 中间件在 agent 认证成功时调用; 人类 JWT 请求不注入。
func WithAgentClaims(ctx context.Context, claims *jwt.Claims) context.Context {
	return context.WithValue(ctx, agentClaimsContextKey{}, claims)
}

// AgentClaimsFromContext 从请求上下文取回 agent claims, 供业务层 (如 vuln resolveActor) 读取。
// 第二个返回值标识当前请求是否来自 agent; 人类请求返回 (nil, false)。
// 这是跨任务契约 (P1-T2 产出), 下游 P1-T3/T5/T6 统一经此读取。
func AgentClaimsFromContext(ctx context.Context) (*jwt.Claims, bool) {
	claims, ok := ctx.Value(agentClaimsContextKey{}).(*jwt.Claims)
	if !ok || claims == nil {
		return nil, false
	}
	return claims, true
}
