/*
 * Copyright (c) 2025 SimcuTeam. All rights reserved.
 * 遵循 MIT 许可证。
 */

package simcu::simapi.middlewares

import soulsoft_web_http.*
import simcu::simapi.communications.*
import simcu::simapi.helpers.*

/**
 * 认证信息获取中间件：从 Header Token 或 Query token 解析登录信息并注入上下文。
 */
public class SimApiAuthMiddleware <: IMiddleware {
    private let _auth: SimApiAuth

    public init(auth: SimApiAuth) {
        _auth = auth
    }

    /**
     * 中间件入口（IMiddleware 风格）。
     */
    public func invoke(context: HttpContext, next: RequestDelegate): Unit {
        var token = context.request.headers.get("Token")
        if (token == None || token == Some("")) {
            token = context.request.query.get("token")
        }
        if (let Some(token) <- token) {
            if (!token.isEmpty()) {
                if (let Some(login) <- _auth.getLogin(token)) {
                    context.items["LoginToken"] = token
                    context.items["LoginInfo"] = login
                }
            }
        }
        next(context)
    }
}
