package router

import (
	"context"
	"github.com/gogf/gf/v2/frame/g"
	"github.com/gogf/gf/v2/net/ghttp"
)

// GContext 网关上下文
type GContext struct {
	UserId     string  // 上下文用户信息
	SessData   g.Map   // 当前Session管理对象
	RouterRule *Router // 路由校验规则
	ServerAddr string  // 服务地址
}

const GContextKey = "jyCtx"

// UpdateGContext 更新上下文GContext
func UpdateGContext(r *ghttp.Request, GCtx *GContext) {
	r.SetCtxVar(GContextKey, GCtx)
}

// GetGContext 获取上下文GContext
func GetGContext(ctx context.Context) *GContext {
	value := ctx.Value(GContextKey)
	if value == nil {
		return nil
	}
	if GCtx, ok := value.(*GContext); ok {
		return GCtx
	}
	return nil
}
