package com.narutohuo.xindazhou.common.config

import android.content.Context
import com.narutohuo.xindazhou.core.log.ILog
import com.narutohuo.xindazhou.core.storage.StorageImpl

/**
 * 配置管理器
 * 
 * 业务层封装，提供便捷的配置管理方式
 * 底层使用 StorageImpl 统一存储
 */
object ConfigManager {
    
    private const val TAG = "ConfigManager"
    private const val KEY_ENVIRONMENT = "environment"
    private const val KEY_FEATURE_PREFIX = "feature_"
    
    /**
     * 初始化配置管理器
     * 需要在 Application 中调用
     * 
     * @param context 上下文
     */
    fun init(context: Context) {
        // 确保 StorageImpl 已初始化
        if (!StorageImpl.isInitialized()) {
            StorageImpl.init(context)
        }
    }
    
    // ========== 基础配置操作 ==========
    
    /**
     * 获取字符串配置
     * 
     * @param key 配置键
     * @param defaultValue 默认值
     * @return 配置值
     */
    fun getString(key: String, defaultValue: String = ""): String {
        return StorageImpl.getString(key, defaultValue)
    }
    
    /**
     * 获取整数配置
     * 
     * @param key 配置键
     * @param defaultValue 默认值
     * @return 配置值
     */
    fun getInt(key: String, defaultValue: Int = 0): Int {
        return StorageImpl.getInt(key, defaultValue)
    }
    
    /**
     * 获取布尔配置
     * 
     * @param key 配置键
     * @param defaultValue 默认值
     * @return 配置值
     */
    fun getBoolean(key: String, defaultValue: Boolean = false): Boolean {
        return StorageImpl.getBoolean(key, defaultValue)
    }
    
    /**
     * 设置字符串配置
     * 
     * @param key 配置键
     * @param value 配置值
     */
    fun setString(key: String, value: String) {
        StorageImpl.putString(key, value)
    }
    
    /**
     * 设置整数配置
     * 
     * @param key 配置键
     * @param value 配置值
     */
    fun setInt(key: String, value: Int) {
        StorageImpl.putInt(key, value)
    }
    
    /**
     * 设置布尔配置
     * 
     * @param key 配置键
     * @param value 配置值
     */
    fun setBoolean(key: String, value: Boolean) {
        StorageImpl.putBoolean(key, value)
    }
    
    // ========== 环境切换 ==========
    
    /**
     * 获取当前环境
     * 
     * @return 环境名称（dev, test, prod）
     */
    fun getEnvironment(): String {
        return getString(KEY_ENVIRONMENT, "dev")
    }
    
    /**
     * 设置环境
     * 
     * @param env 环境名称（dev, test, prod）
     */
    fun setEnvironment(env: String) {
        setString(KEY_ENVIRONMENT, env)
    }
    
    // ========== 功能开关 ==========
    
    /**
     * 检查功能是否启用
     * 
     * @param feature 功能名称
     * @return true 表示功能已启用
     */
    fun isFeatureEnabled(feature: String): Boolean {
        return getBoolean("$KEY_FEATURE_PREFIX$feature", false)
    }
    
    /**
     * 设置功能开关
     * 
     * @param feature 功能名称
     * @param enabled 是否启用
     */
    fun setFeatureEnabled(feature: String, enabled: Boolean) {
        setBoolean("$KEY_FEATURE_PREFIX$feature", enabled)
    }
    
    /**
     * 清除所有配置
     */
    fun clearAll() {
        StorageImpl.clear()
    }
}

