package com.narutohuo.xindazhou.common.network

import com.narutohuo.xindazhou.core.network.NetworkManager as CoreNetworkManager
import com.narutohuo.xindazhou.core.network.NetworkConfig

/**
 * 网络管理器封装
 * 
 * 业务层统一使用此类进行网络初始化，不直接使用 base-core 的 NetworkManager
 * 
 * **使用示例**：
 * ```kotlin
 * // 在 Application 中初始化网络管理器
 * NetworkHelper.init(
 *     baseUrl = "https://api.example.com",
 *     isDebug = BuildConfig.DEBUG,
 *     enableLogging = BuildConfig.DEBUG
 * )
 * 
 * // 设置 Token 提供器
 * NetworkHelper.setTokenProvider {
 *     TokenManager.getAccessToken()
 * }
 * 
 * // 重置网络管理器（切换服务器地址时）
 * NetworkHelper.reset()
 * ```
 */
object NetworkHelper {
    /**
     * 初始化网络管理器
     * 
     * @param baseUrl 基础URL
     * @param isDebug 是否为调试模式
     * @param enableLogging 是否启用日志
     */
    @JvmStatic
    fun init(
        baseUrl: String,
        isDebug: Boolean = false,
        enableLogging: Boolean = isDebug
    ) {
        CoreNetworkManager.init(
            NetworkConfig.Builder()
                .baseUrl(baseUrl)
                .isDebug(isDebug)
                .enableLogging(enableLogging)
                .build()
        )
    }
    
    /**
     * 初始化网络管理器（使用完整配置）
     * 
     * @param baseUrl 基础URL
     * @param connectTimeoutSeconds 连接超时时间（秒）
     * @param readTimeoutSeconds 读取超时时间（秒）
     * @param writeTimeoutSeconds 写入超时时间（秒）
     * @param isDebug 是否为调试模式
     * @param enableLogging 是否启用日志
     */
    @JvmStatic
    fun init(
        baseUrl: String,
        connectTimeoutSeconds: Long,
        readTimeoutSeconds: Long,
        writeTimeoutSeconds: Long,
        isDebug: Boolean = false,
        enableLogging: Boolean = isDebug
    ) {
        CoreNetworkManager.init(
            NetworkConfig.Builder()
                .baseUrl(baseUrl)
                .connectTimeout(connectTimeoutSeconds, java.util.concurrent.TimeUnit.SECONDS)
                .readTimeout(readTimeoutSeconds, java.util.concurrent.TimeUnit.SECONDS)
                .writeTimeout(writeTimeoutSeconds, java.util.concurrent.TimeUnit.SECONDS)
                .isDebug(isDebug)
                .enableLogging(enableLogging)
                .build()
        )
    }
    
    /**
     * 设置 Token 提供器
     * 
     * 用于自动在请求头中添加 Authorization Token
     * 
     * @param tokenProvider Token 提供器，返回当前的 accessToken
     */
    @JvmStatic
    fun setTokenProvider(tokenProvider: () -> String?) {
        CoreNetworkManager.tokenProvider = tokenProvider
    }
    
    /**
     * 重置网络管理器（用于切换服务器地址时）
     * 
     * 清空已缓存的 Retrofit 和 OkHttpClient 实例，下次使用时会重新创建
     */
    @JvmStatic
    fun reset() {
        CoreNetworkManager.reset()
    }
}
