package com.narutohuo.xindazhou.core.push

import android.content.Context

/**
 * 推送服务接口
 * 
 * 用于 base-core 与 push 模块之间的解耦
 * push 模块需要实现此接口，并通过 ARouter 注册
 * 
 * 注意：为了解耦，接口方法使用基本类型，具体类型由实现类处理
 */
interface IPushService {
    
    /**
     * 初始化推送服务
     * 
     * @param context Application 上下文
     * @param appKey 极光推送 AppKey
     * @param channel 推送渠道（可选，默认为 "developer-default"）
     * @param debugMode 是否开启调试模式
     */
    fun initialize(context: Context, appKey: String, channel: String = "developer-default", debugMode: Boolean = false)
    
    /**
     * 设置别名（用于推送）
     * 
     * @param alias 别名（通常是用户ID）
     */
    fun setAlias(alias: String)
    
    /**
     * 设置标签（用于推送）
     * 
     * @param tags 标签列表
     */
    fun setTags(tags: List<String>)
    
    /**
     * 设置消息监听器（自定义消息/透传消息）
     * 
     * @param listener 消息接收回调
     *                 参数：title, content, extras (Map<String, String>), messageId
     */
    fun setMessageListener(listener: (String, String, Map<String, String>, String?) -> Unit)
    
    /**
     * 设置通知点击监听器（用户点击通知栏通知时触发）
     * 
     * @param listener 通知点击回调
     *                 参数：title, content, extras (Map<String, String>), messageId
     */
    fun setNotificationClickListener(listener: ((String, String, Map<String, String>, String?) -> Unit)?)
    
    /**
     * 注册推送（开启推送）
     */
    fun register()
    
    /**
     * 注销推送（关闭推送）
     */
    fun unregister()
    
    /**
     * 获取注册ID（用于标识设备）
     * 
     * @return 设备注册ID，如果未初始化或获取失败返回 null
     */
    fun getRegistrationId(): String?
    
    /**
     * 检查推送是否已开启
     * 
     * @return true 表示推送已开启，false 表示推送已停止或未初始化
     */
    fun isPushEnabled(): Boolean
}

