import UIKit

/// Tencent Qian H5 容器配置(iOS)。
///
/// **设计要点**:与 Android `TencentQianWebViewConfig` 字段 1:1 对齐(命名、默认值、语义)。
public struct TencentQianWebViewConfig {

    // ────────── 顶栏 ──────────

    /// 容器模式下是否显示顶栏。配置模式 (Configurator) 下此字段忽略。
    public var showTopBar: Bool

    /// 顶栏标题文案。空字符串则使用默认「电子签署」。
    public var topBarTitle: String

    /// 顶栏背景色。`nil` 走默认白色。
    public var topBarBackgroundColor: UIColor?

    /// 顶栏文字色(含返回箭头与标题)。`nil` 走默认黑色。
    public var topBarTextColor: UIColor?

    /// 顶栏右上角是否显示「关闭」按钮。
    public var showCloseButton: Bool

    /// 状态栏样式。`.lightContent` 状态栏文字白色(深色背景);`.darkContent` 状态栏文字黑色(浅色背景,默认)。
    public var statusBarStyle: StatusBarStyle

    // ────────── User-Agent ──────────

    /// 是否注入 SDK UA 标识(`qianwv/<version>`)。H5 端通过此标识启用 SDK 专属兼容逻辑并关联日志；关闭后相关兼容功能将降级，且问题排查难度增大。默认开启。
    public var injectUserAgent: Bool

    /// 客户附加的 UA 段,会拼接在 `qianwv/x.x.x` 之后。例:`"myapp/3.2.1"` → 最终 UA = `<system-ua> qianwv/1.0.0 myapp/3.2.1`
    public var userAgentExtra: String

    // ────────── 关闭确认 ──────────

    /// 用户在容器模式下点关闭/返回时,是否弹「确认离开?」二次确认。推荐场景:防止用户在签署中误退出。
    public var confirmBeforeClose: Bool

    /// 二次确认弹窗的标题文案,空走默认。
    public var confirmCloseTitle: String

    /// 二次确认弹窗的正文文案,空走默认。
    public var confirmCloseMessage: String

    // ────────── Scheme 拦截白名单 ──────────

    /// 允许跳出本 App 的外部 scheme 白名单。
    ///
    /// **覆盖语义**:传入即整体覆盖,默认 = `["weixin", "alipays"]`。
    /// 客户传 `[]` = 禁止所有外部 scheme 跳出。
    public var externalSchemes: [String]

    // ────────── 下载 Cookie 同步 ──────────

    /// 下载文件时是否从 WKWebView 同步 Cookie 到下载请求头。
    ///
    /// - `false`(默认):不携带 Cookie。电子签签署场景的下载链接通常为
    ///   CDN 公开链接或带签名 token 的 URL,无需 Cookie 鉴权。
    /// - `true`:从 `WKWebsiteDataStore` 获取与下载 URL 匹配的 Cookie,
    ///   注入到下载请求的 `Cookie` header。适用于客户自有业务中
    ///   需要 Cookie 鉴权才能下载的场景。
    public var downloadWithCookies: Bool

    // ────────── 自检页 URL ──────────

    /// 自检页地址。`nil` 时走 SDK 默认 URL(SDK 默认 beta 环境,兼容性测试无需切生产)。
    public var compatibilityTestUrl: String?

    public init(
        showTopBar: Bool = true,
        topBarTitle: String = "",
        topBarBackgroundColor: UIColor? = nil,
        topBarTextColor: UIColor? = nil,
        showCloseButton: Bool = true,
        statusBarStyle: StatusBarStyle = .darkContent,
        injectUserAgent: Bool = true,
        userAgentExtra: String = "",
        confirmBeforeClose: Bool = false,
        confirmCloseTitle: String = "",
        confirmCloseMessage: String = "",
        externalSchemes: [String] = ["weixin", "alipays"],
        downloadWithCookies: Bool = false,
        compatibilityTestUrl: String? = nil
    ) {
        self.showTopBar = showTopBar
        self.topBarTitle = topBarTitle
        self.topBarBackgroundColor = topBarBackgroundColor
        self.topBarTextColor = topBarTextColor
        self.showCloseButton = showCloseButton
        self.statusBarStyle = statusBarStyle
        self.injectUserAgent = injectUserAgent
        self.userAgentExtra = userAgentExtra
        self.confirmBeforeClose = confirmBeforeClose
        self.confirmCloseTitle = confirmCloseTitle
        self.confirmCloseMessage = confirmCloseMessage
        self.externalSchemes = externalSchemes
        self.downloadWithCookies = downloadWithCookies
        self.compatibilityTestUrl = compatibilityTestUrl
    }

    public enum StatusBarStyle {
        case lightContent
        case darkContent
    }

    public static let `default` = TencentQianWebViewConfig()

    /// SDK 内置自检页 URL(SDK 默认 beta 环境,兼容性测试无需切生产)。
    public static let defaultCompatibilityTestUrl: String =
        "https://quick.beta.qian.tencent.cn/compatibilityTest"
}
