package com.narutohuo.xindazhou.qrcode.impl

import android.app.Activity
import android.util.Log
import androidx.fragment.app.FragmentActivity
import com.narutohuo.xindazhou.qrcode.api.QRCodeManager
import com.narutohuo.xindazhou.qrcode.model.QRCodeResponse
import com.narutohuo.xindazhou.qrcode.ui.QRCodeScanFragment

/**
 * 二维码管理器实现类（单例模式）
 * 
 * 使用单例方便管理，多个界面可以共享同一个扫码管理器
 * 
 * 使用华为 Customized View Mode 实现精美的自定义扫码界面
 * 内部使用 Fragment 桥接 ActivityResultLauncher，业务层无需处理 onActivityResult
 */
class QRCodeManagerImpl private constructor() : QRCodeManager {
    
    companion object {
        @Volatile
        private var INSTANCE: QRCodeManagerImpl? = null
        
        /**
         * 获取二维码管理器单例
         */
        @JvmStatic
        fun getInstance(): QRCodeManagerImpl {
            return INSTANCE ?: synchronized(this) {
                INSTANCE ?: QRCodeManagerImpl().also { INSTANCE = it }
            }
        }
        
        /**
         * 销毁单例（用于测试）
         */
        @JvmStatic
        fun destroyInstance() {
            INSTANCE = null
        }
    }
    
    private val tag = "QRCodeManager"
    
    override fun scanQRCode(activity: Activity, callback: (QRCodeResponse) -> Unit) {
        Log.d(tag, "scanQRCode: 启动扫码界面")
        
        // 如果 Activity 是 FragmentActivity，使用 Fragment 桥接（推荐方式）
        if (activity is FragmentActivity) {
            QRCodeScanFragment.startScan(activity) { result ->
                if (result != null) {
                    callback(QRCodeResponse(
                        success = true,
                        data = result
                    ))
                } else {
                    callback(QRCodeResponse(
                        success = false,
                        errorMessage = "用户取消扫码"
                    ))
                }
            }
        } else {
            // 如果不是 FragmentActivity，降级使用 startActivityForResult
            // 这种情况需要业务层在 onActivityResult 中处理
            callback(QRCodeResponse(
                success = false,
                errorMessage = "当前 Activity 不支持扫码功能，请使用 FragmentActivity"
            ))
        }
    }
}

