package com.narutohuo.xindazhou.common.network.interceptor

import okhttp3.Interceptor
import okhttp3.Response

/**
 * 请求头拦截器
 * 
 * 统一为所有请求添加公共请求头，包括：
 * - Content-Type: application/json
 * - Accept: application/json
 * - Authorization: Bearer {token}（如果提供了 Token）
 * 
 * **架构说明**：
 * 按照架构设计文档，网络服务统一放在 `base/common/network/` 模块中。
 * 此拦截器与 NetworkManager、ApiManager、ApiResponseParser 等统一管理。
 * 
 * 使用方式：
 * ```kotlin
 * // 方式1：直接使用
 * val interceptor = HeaderInterceptor { 
 *     TokenStore.getAccessToken() 
 * }
 * builder.addInterceptor(interceptor)
 * 
 * // 方式2：通过 NetworkManager 使用（推荐）
 * NetworkManager.tokenProvider = { TokenStore.getAccessToken() }
 * // NetworkManager 会自动创建并使用 HeaderInterceptor
 * ```
 */
class HeaderInterceptor(
    private val tokenProvider: (() -> String?)? = null
) : Interceptor {
    
    override fun intercept(chain: Interceptor.Chain): Response {
        val originalRequest = chain.request()
        
        // 构建新的请求，添加公共请求头
        val requestBuilder = originalRequest.newBuilder()
            .header("Content-Type", "application/json")
            .header("Accept", "application/json")
        
        // 如果提供了 Token Provider，则添加 Authorization 头
        tokenProvider?.invoke()?.let { token ->
            if (token.isNotBlank()) {
                requestBuilder.header("Authorization", "Bearer $token")
            }
        }
        
        return chain.proceed(requestBuilder.build())
    }
}

