package com.remax.notification.utils

import android.util.Log
import com.google.firebase.messaging.FirebaseMessaging
import com.remax.notification.utils.DateUtil
import com.remax.notification.utils.Topic
import com.remax.notification.utils.NotiLogger

/**
 * FCM 主题订阅工具类
 */
object FCMTopicManager {
    private const val TAG = "FCMTopicManager"
    
    /**
     * 订阅通用主题
     */
    fun subscribeCommonTopic() {
        // 全量推送（推送给所有用户）
        subscribeToTopic(Topic.ALL)
        // 全量推送（推送给所有用户），指定时区定时
        subscribeToTopic(DateUtil.getFirebaseTopicWithTimezone(Topic.ALL))
    }
    
    /**
     * 订阅指定主题
     * @param topic 主题名称
     */
    fun subscribeToTopic(topic: String) {
        NotiLogger.d("订阅主题: $topic")
        FirebaseMessaging.getInstance().subscribeToTopic(topic)
            .addOnCompleteListener { task ->
                var msg = "订阅成功"
                if (!task.isSuccessful) {
                    msg = "订阅失败"
                }
                NotiLogger.d("主题订阅结果:[$topic] $msg")
            }
    }
    
    /**
     * 取消订阅指定主题
     * @param topic 主题名称
     */
    fun unsubscribeFromTopic(topic: String) {
        NotiLogger.d("取消订阅主题: $topic")
        FirebaseMessaging.getInstance().unsubscribeFromTopic(topic)
            .addOnCompleteListener { task ->
                var msg = "取消订阅成功"
                if (!task.isSuccessful) {
                    msg = "取消订阅失败"
                }
                NotiLogger.d("主题取消订阅结果:[$topic] $msg")
            }
    }
    
    /**
     * 记录订阅状态
     */
    fun logSubscriptionStatus() {
        NotiLogger.d("=== FCM 主题订阅状态 ===")
        NotiLogger.d("已订阅主题:")
        NotiLogger.d("- ALL (全量推送)")
        NotiLogger.d("- ${DateUtil.getFirebaseTopicWithTimezone(Topic.ALL)} (时区推送)")
        NotiLogger.d("========================")
    }
    
    /**
     * 获取 FCM 令牌
     */
    fun getFCMToken(callback: (String?) -> Unit) {
        FirebaseMessaging.getInstance().token
            .addOnCompleteListener { task ->
                if (task.isSuccessful) {
                    val token = task.result
                    NotiLogger.d("FCM Token: $token")
                    callback(token)
                } else {
                    NotiLogger.e("获取 FCM Token 失败", task.exception)
                    callback(null)
                }
            }
    }
}
