import Foundation

/// 预热目标环境（三端统一）。
///
/// 环境只决定"拉哪个 manifest URL"，下游 hosts / warmupUrl 由 manifest 内容自描述，
/// SDK 不硬编码任何业务 host。``PrewarmConfig/manifestUrl`` 若显式传入则优先级更高。
public enum PrewarmEnvironment {
    /// 线上生产环境。
    case prod
    /// 客户联调 beta 环境。
    case beta
    /// 内部开发 test 环境。
    case test

    /// 各环境内置 manifest URL 映射。
    public var manifestUrl: String {
        switch self {
        case .prod: return "https://res.ess.tencent.cn/cdn/h5-std/warmup-manifest.json"
        case .beta: return "https://res.ess.tencent.cn/cdn/h5-std-beta/warmup-manifest.json"
        case .test: return "https://res.ess.tencent.cn/cdn/h5-std-dev/warmup-manifest.json"
        }
    }

    /// 各环境已知的 `quick.*` 入口 host（用于 `open()` 环境错配检测）。
    public var knownQuickHost: String {
        switch self {
        case .prod: return "quick.qian.tencent.com"
        case .beta: return "quick.beta.qian.tencent.cn"
        case .test: return "quick.test.qian.tencent.cn"
        }
    }

    /// 反查某 host 属于哪个已知环境；非 3 个已知 `quick.*` host 返回 `nil`。
    public static func of(host: String?) -> PrewarmEnvironment? {
        guard let host = host?.lowercased() else { return nil }
        switch host {
        case "quick.qian.tencent.com": return .prod
        case "quick.beta.qian.tencent.cn": return .beta
        case "quick.test.qian.tencent.cn": return .test
        default: return nil
        }
    }

    /// 反查某完整 URL 属于哪个已知环境。
    public static func of(url: String?) -> PrewarmEnvironment? {
        guard let url = url, let host = URL(string: url)?.host else { return nil }
        return of(host: host)
    }
}
