package com.tencent.qian.webview.model

import java.net.URI

/**
 * 预热目标环境（三端统一）。
 *
 * 环境只决定"拉哪个 manifest URL"，下游 hosts / warmupUrl 由 manifest 内容自描述，
 * SDK 不硬编码任何业务 host。[PrewarmConfig.manifestUrl] 若显式传入则优先级更高。
 */
public enum class PrewarmEnvironment {
    /** 线上生产环境。 */
    PROD,

    /** 客户联调 beta 环境。 */
    BETA,

    /** 内部开发 test 环境。 */
    TEST;

    public companion object {

        /** 各环境内置 manifest URL 映射。 */
        @JvmStatic
        public fun manifestUrlOf(env: PrewarmEnvironment): String = when (env) {
            PROD -> "https://res.ess.tencent.cn/cdn/h5-std/warmup-manifest.json"
            BETA -> "https://res.ess.tencent.cn/cdn/h5-std-beta/warmup-manifest.json"
            TEST -> "https://res.ess.tencent.cn/cdn/h5-std-dev/warmup-manifest.json"
        }

        /** 各环境已知的 `quick.*` 入口 host（用于 `open()` 环境错配检测）。 */
        @JvmStatic
        public fun knownQuickHostOf(env: PrewarmEnvironment): String = when (env) {
            PROD -> "quick.qian.tencent.com"
            BETA -> "quick.beta.qian.tencent.cn"
            TEST -> "quick.test.qian.tencent.cn"
        }

        /** 反查某 host 属于哪个已知环境；非 3 个已知 `quick.*` host 返回 `null`。 */
        @JvmStatic
        public fun environmentOfHost(host: String?): PrewarmEnvironment? {
            if (host.isNullOrEmpty()) return null
            return when (host.lowercase()) {
                "quick.qian.tencent.com" -> PROD
                "quick.beta.qian.tencent.cn" -> BETA
                "quick.test.qian.tencent.cn" -> TEST
                else -> null
            }
        }

        /** 反查某完整 URL 属于哪个已知环境。 */
        @JvmStatic
        public fun environmentOfUrl(url: String?): PrewarmEnvironment? {
            if (url.isNullOrEmpty()) return null
            val host: String? = try {
                URI(url).host
            } catch (_: Throwable) {
                null
            }
            return environmentOfHost(host)
        }
    }
}
