import Foundation

/// SDK 内部事件,用于将容器层非协议性观测点上报给业务方。
///
/// **跨端一致性**:与 Android `SdkEvent` sealed class 语义对齐;
/// 各平台仅保留本端实际触发的 case,对方平台特有事件以注释说明等价关系。
public enum SdkEvent: Equatable {

    // ────────── 页面生命周期 ──────────

    /// WebView 开始加载某 URL(主框架)
    case pageStarted(url: String)

    /// WebView 主框架加载完成
    case pageFinished(url: String)

    // ────────── 权限 ──────────

    /// Web 端请求的权限已被系统授予
    case permissionGranted(permissions: [String])

    /// Web 端请求的权限被用户拒绝
    case permissionDenied(permissions: [String])

    // ────────── Scheme 拦截 ──────────

    case schemeIntercepted(scheme: String, url: String)
    case schemeNotMatched(url: String)

    // ────────── 网络与渲染错误 ──────────

    /// `decidePolicyFor navigationAction/navigationResponse` 主框架失败
    case loadError(url: String, errorCode: Int, description: String)

    /// 主框架 HTTP 错误状态码(>=400)
    case httpError(url: String, statusCode: Int, reasonPhrase: String)

    /// SSL / TLS 错误。SDK 已强制 cancel,业务侧可弹「证书异常」之类提示。
    case sslError(url: String, primaryError: Int)

    // ────────── 下载 ──────────

    case downloadStart(url: String, mimeType: String, contentDisposition: String)
    case downloadCompleted(url: String, localPath: String)
    case downloadFailed(url: String, reason: String)

    // ────────── 渲染进程崩溃 ──────────

    /// WKWebView Web Content 进程被系统终止(iOS 低内存时触发)。
    ///
    /// **Android 等价**:`RenderProcessGone(didCrash, url)`。
    case webContentProcessTerminated(url: String)

    // ────────── UA 注入失败 ──────────

    case userAgentInjectFailed(reason: String)
}
