package com.narutohuo.xindazhou.common.version.repository

import com.narutohuo.xindazhou.common.log.LogHelper
import com.narutohuo.xindazhou.common.network.ApiBaseRepository
import com.narutohuo.xindazhou.common.version.datasource.remote.VersionRemoteDataSource
import com.narutohuo.xindazhou.common.version.model.VersionResponse

/**
 * 版本管理 Repository
 * 
 * 继承 ApiBaseRepository，自动获得：
 * - 统一的错误处理
 * - 日志记录
 * - 数据转换扩展点
 */
class VersionRepository(
    private val remoteDataSource: VersionRemoteDataSource
) : ApiBaseRepository() {
    
    /**
     * 检查版本更新
     * 
     * @param platform 平台类型：1-安卓，2-鸿蒙，3-iOS
     * @param currentVersionCode 当前版本号
     * @return 版本信息，如果没有版本或没有更新则返回 null
     */
    suspend fun checkVersion(
        platform: Int,
        currentVersionCode: Int
    ): VersionResponse? {
        val result = remoteDataSource.getLatestVersion(platform, currentVersionCode)
        
        return result.getOrNull()?.let { versionResponse ->
            // 如果没有更新，返回 null
            if (!versionResponse.hasUpdate) {
                null
            } else {
                versionResponse
            }
        } ?: run {
            // 如果请求失败，记录日志但不抛出异常
            // 这样客户端可以正常启动，不会因为版本检查失败而阻塞
            result.onFailure { throwable ->
                LogHelper.e("VersionRepository", "版本检查失败", throwable)
                handleError(throwable)
            }
            null
        }
    }
    
    /**
     * 检查版本更新
     * 
     * @param versionResponse 版本响应数据
     * @return 是否需要更新（true 表示需要更新）
     */
    fun hasUpdate(versionResponse: VersionResponse?): Boolean {
        return versionResponse != null && versionResponse.hasUpdate
    }
    
    /**
     * 判断是否为强制更新
     * 
     * @param versionResponse 版本响应数据
     * @return 是否为强制更新
     */
    fun isForceUpdate(versionResponse: VersionResponse?): Boolean {
        return versionResponse?.forceUpdate == true
    }
}

