package com.pangolin.pangolin_vpn

import android.os.Handler
import android.os.Looper

/**
 * VpnEventBus — Application 级状态总线
 *
 * 解耦 PangolinVpnService 与 MainActivity：
 *   - Service 调用 postStatus / postStats 推送事件
 *   - MainActivity 注册 StatusListener / StatsListener 接收事件并转发给 Flutter EventSink
 *
 * 线程安全：内部切换到主线程再回调（VPN 内核可能在工作线程回调）。
 */
object VpnEventBus {

    interface StatusListener {
        fun onStatus(status: String)
    }

    interface StatsListener {
        fun onStats(stats: Map<String, Any>)
    }

    private val mainHandler = Handler(Looper.getMainLooper())

    @Volatile private var statusListener: StatusListener? = null
    @Volatile private var statsListener: StatsListener? = null

    /**
     * 当前 VPN 状态快照，供 getStatus() 一次性查询使用。
     * 值：off | connecting | on | error
     */
    @Volatile var currentStatus: String = "off"
        private set

    fun setStatusListener(l: StatusListener?) { statusListener = l }
    fun setStatsListener(l: StatsListener?) { statsListener = l }

    /** 由 PangolinVpnService（可能在工作线程）调用 */
    fun postStatus(status: String) {
        currentStatus = status
        mainHandler.post { statusListener?.onStatus(status) }
    }

    /** 由 PangolinVpnService（可能在工作线程）调用 */
    fun postStats(stats: Map<String, Any>) {
        mainHandler.post { statsListener?.onStats(stats) }
    }
}
