/*
 * Copyright (c) 2025 SimcuTeam. All rights reserved.
 * 遵循 MIT 许可证。
 * 签名提供器基类。
 *
 * 说明：本类含配置字段（appIdName/queryExpires 等），故用 open class 而非 interface
 * （Cangjie 接口不能声明字段），与抽象类对应。应用继承本类并实现 getKey。
 */

package simcu::simapi.interfaces

/**
 * 签名提供器基类：应用继承并实现 getKey(appId)，返回 appId 对应的密钥。
 */
public open class SimApiSignProviderBase {
    /// appId 字段名（None 表示签名中不包含 appId）
    public var appIdName: ?String = Some("appId")

    /// 时间戳字段名
    public var timestampName: String = "timestamp"

    /// 随机串字段名
    public var nonceName: String = "nonce"

    /// 签名字段名
    public var signName: String = "sign"

    /// 请求过期秒数（0 表示不校验 timestamp）
    public var queryExpires: Int64 = 5

    /// 是否开启 nonce 去重（需配置缓存）
    public var duplicateRequestProtection: Bool = true

    /// 参与签名的额外字段（与 appId/timestamp/nonce 一起拼入签名字符串）
    public var signFields: Array<String> = []


    /**
     * 根据 appId 获取密钥。
     * @param appId 应用 ID（未配置 appIdName 时为 None）。
     * @return 密钥；返回 None 表示获取失败。
     */
    public open func getKey(_: ?String): ?String {
        None
    }
}
