package com.narutohuo.xindazhou.push.api

import com.narutohuo.xindazhou.push.model.PushConfig
import com.narutohuo.xindazhou.push.model.PushMessage

/**
 * 推送服务接口
 * 
 * 提供推送消息接收和处理能力
 * 封装极光推送 SDK，提供统一的推送服务接口
 */
interface PushService {
    
    /**
     * 初始化推送服务
     * 
     * 在 Application.onCreate() 中调用，配置极光推送参数
     * 
     * @param context Application 上下文
     * @param config 推送服务配置
     */
    fun initialize(context: android.content.Context, config: PushConfig)
    
    /**
     * 设置别名（用于推送）
     * 
     * @param alias 别名（通常是用户ID）
     */
    fun setAlias(alias: String)
    
    /**
     * 设置标签（用于推送）
     * 
     * @param tags 标签列表
     */
    fun setTags(tags: List<String>)
    
    /**
     * 设置消息监听器（自定义消息/透传消息）
     * 
     * @param listener 消息接收回调，返回PushMessage
     */
    fun setMessageListener(listener: (PushMessage) -> Unit)
    
    /**
     * 设置通知点击监听器（用户点击通知栏通知时触发）
     * 
     * @param listener 通知点击回调，返回PushMessage
     *                 可以通过 PushMessage.extras 获取跳转参数，例如：
     *                 - "page": 跳转页面名称（如 "detail", "home" 等）
     *                 - "id": 业务ID（如订单ID、商品ID等）
     */
    fun setNotificationClickListener(listener: ((PushMessage) -> Unit)?)
    
    /**
     * 注册推送（开启推送）
     */
    fun register()
    
    /**
     * 注销推送（关闭推送）
     */
    fun unregister()
    
    /**
     * 获取注册ID（用于标识设备）
     * 
     * @return 设备注册ID，如果未初始化或获取失败返回 null
     */
    fun getRegistrationId(): String?
    
    /**
     * 检查推送是否已开启
     * 
     * @return true 表示推送已开启，false 表示推送已停止或未初始化
     */
    fun isPushEnabled(): Boolean
}

