package com.narutohuo.xindazhou.common.networkrx.interceptor

import okhttp3.Interceptor
import okhttp3.Request
import okhttp3.Response

/**
 * 请求头拦截器（基于RxJava）
 * 
 * 为所有网络请求添加通用的请求头
 * 
 * 功能：
 * - 添加Content-Type
 * - 添加Accept
 * - 添加设备信息
 * - 添加App版本信息
 * - 添加其他通用头
 * 
 * 使用方式：
 * ```kotlin
 * val client = NetworkManager.createOkHttpClient(HeaderInterceptor())
 * ```
 */
class HeaderInterceptor : Interceptor {
    
    override fun intercept(chain: Interceptor.Chain): Response {
        val originalRequest = chain.request()
        
        // 构建新的请求
        val requestBuilder = originalRequest.newBuilder()
            .addHeader("Content-Type", "application/json; charset=utf-8")
            .addHeader("Accept", "application/json")
            .addHeader("X-App-Version", getAppVersion())
            .addHeader("X-Device-Type", "Android")
            .addHeader("X-Platform", "Android")
            .addHeader("X-Request-Id", generateRequestId())
        
        // 添加Token（如果存在）
        val token = getToken()
        if (!token.isNullOrEmpty()) {
            requestBuilder.addHeader("Authorization", "Bearer $token")
        }
        
        val request = requestBuilder.build()
        return chain.proceed(request)
    }
    
    /**
     * 获取App版本号
     * 
     * @return 版本号
     */
    private fun getAppVersion(): String {
        // 实际项目中应从BuildConfig或包管理器获取
        return "1.0.0"
    }
    
    /**
     * 生成请求ID
     * 
     * @return 请求ID
     */
    private fun generateRequestId(): String {
        return System.currentTimeMillis().toString() + "-" + Math.random().toString().substring(2, 8)
    }
    
    /**
     * 获取Token
     * 
     * @return Token
     */
    private fun getToken(): String? {
        // 实际项目中应从存储或Token管理器获取
        return null
    }
}