/*
 * Copyright (c) 2025 SimcuTeam. All rights reserved.
 * 遵循 MIT 许可证。
 * Controllers/SimApiBaseController：基础控制器，所有控制器继承。
 * 提供当前登录信息访问。
 */

package simcu::simapi.controllers

import soulsoft_web_http.*
import soulsoft_web_mvc.core.*
import simcu::simapi.communications.*
import simcu::simapi.helpers.*
import simcu::simapi.interfaces.*


/**
 * 基础控制器：所有控制器均继承本控制器。
 */
public open class SimApiBaseController <: Controller & BindRequestContext {
    /**
     * 当前登录信息（需 EnableSimApiAuth；未登录抛 401）。
     */
    protected prop loginInfo: SimApiLoginItem {
        get() {
            if (let Some(item) <- context.items.get("LoginInfo")) {
                if (let login: SimApiLoginItem <- item) {
                    return login
                }
            }
            SimApiError.error(code: 401, message: "需要登录")
            SimApiLoginItem("")
        }
    }

    /**
     * 当前登录 Token（需 EnableSimApiAuth；未登录抛 401）。
     */
    protected prop loginToken: String {
        get() {
            if (let Some(item) <- context.items.get("LoginToken")) {
                if (let token: String <- item) {
                    return token
                }
            }
            SimApiError.error(code: 401, message: "需要登录")
            ""
        }
    }


    /**
     * 绑定当前请求上下文（供 SimApiRequestDelegateFactory 调用；
     * Controller.setup 为 protected，此处以 public 方法暴露给框架）。
     */
    public func bindRequestContext(context: HttpContext): Unit {
        this.setup(context)
    }
}
