import Foundation
import os

/// SDK 内部统一日志工具。
///
/// 版本自适应：
/// - iOS 14+: 使用 `os.Logger`（Release 动态值默认 private、.debug 不持久化、Console.app 过滤）
/// - iOS 11-13: 降级为 `NSLog`（中性日志内容，无敏感信息脱敏需求）
enum QianLog {
    /// 导航相关日志（WKNavigationDelegate）
    static let navigation = QianCategoryLogger(subsystem: "com.tencent.qian.webview", category: "Navigation")

    /// 下载相关日志（QianDownloadManager / URLSession download）
    static let download = QianCategoryLogger(subsystem: "com.tencent.qian.webview", category: "Download")
}

/// 分类日志封装。对外保持 `.info("...")` / `.debug("...")` / `.error("...")` / `.warning("...")` 调用形态，
/// 内部按 iOS 版本选择 `os.Logger` 或 `NSLog`，调用点无需改动。
struct QianCategoryLogger {
    let subsystem: String
    let category: String

    @available(iOS 14, *)
    private var logger: Logger { Logger(subsystem: subsystem, category: category) }

    func info(_ message: @autoclosure @escaping () -> String) {
        if #available(iOS 14, *) {
            logger.info("\(message(), privacy: .public)")
        } else {
            NSLog("[%@][%@][INFO] %@", subsystem, category, message())
        }
    }

    func debug(_ message: @autoclosure @escaping () -> String) {
        if #available(iOS 14, *) {
            logger.debug("\(message(), privacy: .public)")
        } else {
            NSLog("[%@][%@][DEBUG] %@", subsystem, category, message())
        }
    }

    func warning(_ message: @autoclosure @escaping () -> String) {
        if #available(iOS 14, *) {
            logger.warning("\(message(), privacy: .public)")
        } else {
            NSLog("[%@][%@][WARN] %@", subsystem, category, message())
        }
    }

    func error(_ message: @autoclosure @escaping () -> String) {
        if #available(iOS 14, *) {
            logger.error("\(message(), privacy: .public)")
        } else {
            NSLog("[%@][%@][ERROR] %@", subsystem, category, message())
        }
    }
}
