import Foundation

/// 预热全局配置（三端字段对齐）。
///
/// 全部字段带默认值，``TencentQianWebViewPrewarmer/configure(_:)`` 可省参。
public struct PrewarmConfig {

    /// 目标环境，默认 `.prod`。
    public var environment: PrewarmEnvironment

    /// 显式 manifest URL 覆盖（私有部署 / 特殊场景逃生舱）；
    /// `nil` 时按 ``environment`` 走内置映射。
    public var manifestUrl: String?

    /// 池容量。有效值恒为 1；> 1 会被 clamp 到 1 并 log 警告（参数保留以便后续扩展）。
    public var poolSize: Int

    /// 是否启用 WebView 复用池。
    public var enablePool: Bool

    /// 预热语言偏好（如 `"en-US"` / `"zh-CN"`）。
    ///
    /// 客户显式指定要预热的语言资源；`nil` 时交由 `warmup.html` 自动判定
    /// （`localStorage` / `navigator.language`）。iOS 走 L4：非空时以 `&lang=` 传入
    /// `warmupUrl`（在 warmup.html 内优先级最高）。
    public var preferredLanguage: String?

    /// 是否注入 SDK UA 标识（`qianwv/<version>`，与 ``TencentQianWebViewConfig`` 对齐），默认 true。
    ///
    /// 池实例按本字段创建 `applicationNameForUserAgent` 并热身 `warmupUrl`，
    /// 保证与 `open()` 的 config UA 一致才能命中缓存并被复用。
    public var injectUserAgent: Bool

    /// 客户附加 UA 段，拼接在 `qianwv/x.x.x` 之后（与 ``TencentQianWebViewConfig`` 对齐），默认空。
    ///
    /// 与 `open()` 的 config UA 一致时池实例才会被复用。
    public var userAgentExtra: String

    public init(
        environment: PrewarmEnvironment = .prod,
        manifestUrl: String? = nil,
        poolSize: Int = 1,
        enablePool: Bool = true,
        preferredLanguage: String? = nil,
        injectUserAgent: Bool = true,
        userAgentExtra: String = ""
    ) {
        self.environment = environment
        self.manifestUrl = manifestUrl
        self.poolSize = poolSize
        self.enablePool = enablePool
        self.preferredLanguage = preferredLanguage
        self.injectUserAgent = injectUserAgent
        self.userAgentExtra = userAgentExtra
    }

    /// 默认配置（全部默认值）。
    public static let `default` = PrewarmConfig()
}
