package com.narutohuo.xindazhou.common.network

import android.util.Log

/**
 * API 基础仓库类
 * 
 * 封装通用仓库逻辑：
 * - 统一错误处理
 * - 数据转换（Data Model → Domain Model）
 * - 缓存策略（可选）
 * 
 * 使用方式：
 * ```kotlin
 * class AuthRepository(
 *     private val remoteDataSource: AuthRemoteDataSource
 * ) : ApiBaseRepository() {
 *     
 *     suspend fun login(mobile: String, password: String): Result<LoginResponse> {
 *         val request = LoginRequest(mobile, password)
 *         return remoteDataSource.login(request)
 *     }
 * }
 * ```
 */
open class ApiBaseRepository {
    
    /**
     * 获取日志标签（子类可重写）
     */
    protected open val tag: String
        get() = this::class.simpleName ?: "ApiBaseRepository"
    
    /**
     * 处理数据转换（Data Model → Domain Model）
     * 
     * 子类可重写此方法实现自定义转换逻辑
     */
    protected open fun <T> transform(data: T): T {
        return data
    }
    
    /**
     * 统一错误处理
     * 
     * 子类可重写此方法实现自定义错误处理
     */
    protected open fun handleError(throwable: Throwable): Result<Nothing> {
        val errorMsg = throwable.message ?: "操作失败"
        Log.e(tag, "操作失败: $errorMsg", throwable)
        return Result.failure(throwable)
    }
}

