package com.narutohuo.xindazhou.share.api

import android.app.Activity
import android.content.Intent
import com.narutohuo.xindazhou.share.model.ShareConfig
import com.narutohuo.xindazhou.share.model.ShareContent
import com.narutohuo.xindazhou.share.model.ShareResponse

/**
 * 分享服务接口
 * 
 * 提供分享到微信、QQ、微博、抖音、小红书、快手等主流平台的能力
 */
interface ShareService {
    
    /**
     * 初始化分享服务
     * 
     * 在 Application.onCreate() 中调用，配置友盟和各平台参数
     * 
     * @param context Application 上下文
     * @param config 分享服务配置
     */
    fun initialize(context: android.content.Context, config: ShareConfig)
    
    /**
     * 处理分享回调（内部使用）
     * 
     * 注意：业务层不需要调用此方法！
     * 此方法由 ShareProxyActivity 内部调用，用于处理友盟 SDK 的回调
     * 业务层只需要调用 share() 方法，所有回调会自动处理
     * 
     * @param activity Activity 上下文
     * @param requestCode 请求码
     * @param resultCode 结果码
     * @param data Intent 数据
     */
    fun onActivityResult(activity: Activity, requestCode: Int, resultCode: Int, data: Intent?)
    
    /**
     * 释放资源
     * 
     * 在 Activity.onDestroy() 中调用（可选）
     * 
     * @param activity Activity 上下文
     */
    fun release(activity: Activity)
    
    /**
     * 统一分享方法（推荐使用）
     * 
     * **自动处理 onActivityResult，业务层不需要在 Activity 中处理回调**
     * 内部使用透明代理 Activity 封装所有实现细节
     * 
     * 如果 ShareContent.platform 已指定，则直接分享到该平台
     * 如果 ShareContent.platform 为 null，则显示分享弹窗让用户选择平台
     * 
     * @param activity Activity上下文
     * @param content 分享内容（如果 platform 为 null，会显示分享弹窗）
     * @param callback 分享结果回调，返回ShareResponse
     */
    fun share(activity: Activity, content: ShareContent, callback: (ShareResponse) -> Unit)
    
    /**
     * 手动分享方法（内部使用，避免递归调用）
     * 
     * 如果指定了平台，直接分享到该平台；否则显示分享弹窗
     * 此方法不会启动 ShareProxyActivity，用于 ShareProxyActivity 内部调用
     * 
     * @param activity Activity上下文
     * @param content 分享内容
     * @param callback 分享结果回调，返回ShareResponse
     */
    fun shareManual(activity: Activity, content: ShareContent, callback: (ShareResponse) -> Unit)
    
    /**
     * 显示分享弹窗（从底部弹出）
     * 
     * 显示所有可用的分享平台，用户选择后执行分享
     * 
     * @param activity Activity上下文
     * @param content 分享内容
     * @param callback 分享结果回调，返回ShareResponse
     */
    fun showShareDialog(activity: Activity, content: ShareContent, callback: (ShareResponse) -> Unit)
    
    /**
     * 分享到微信
     * 
     * @param activity Activity上下文
     * @param content 分享内容
     * @param callback 分享结果回调，返回ShareResponse
     */
    fun shareToWeChat(activity: Activity, content: ShareContent, callback: (ShareResponse) -> Unit)
    
    /**
     * 分享到微信朋友圈
     * 
     * @param activity Activity上下文
     * @param content 分享内容
     * @param callback 分享结果回调，返回ShareResponse
     */
    fun shareToWeChatMoments(activity: Activity, content: ShareContent, callback: (ShareResponse) -> Unit)
    
    /**
     * 分享到QQ
     * 
     * @param activity Activity上下文
     * @param content 分享内容
     * @param callback 分享结果回调，返回ShareResponse
     */
    fun shareToQQ(activity: Activity, content: ShareContent, callback: (ShareResponse) -> Unit)
    
    /**
     * 分享到QQ空间
     * 
     * @param activity Activity上下文
     * @param content 分享内容
     * @param callback 分享结果回调，返回ShareResponse
     */
    fun shareToQZone(activity: Activity, content: ShareContent, callback: (ShareResponse) -> Unit)
    
    /**
     * 分享到微博
     * 
     * @param activity Activity上下文
     * @param content 分享内容
     * @param callback 分享结果回调，返回ShareResponse
     */
    fun shareToWeibo(activity: Activity, content: ShareContent, callback: (ShareResponse) -> Unit)
    
    /**
     * 分享到抖音
     * 
     * @param activity Activity上下文
     * @param content 分享内容
     * @param callback 分享结果回调，返回ShareResponse
     */
    fun shareToDouyin(activity: Activity, content: ShareContent, callback: (ShareResponse) -> Unit)
    
    /**
     * 分享到小红书
     * 
     * @param activity Activity上下文
     * @param content 分享内容
     * @param callback 分享结果回调，返回ShareResponse
     */
    fun shareToXiaohongshu(activity: Activity, content: ShareContent, callback: (ShareResponse) -> Unit)
    
    /**
     * 分享到快手
     * 
     * @param activity Activity上下文
     * @param content 分享内容
     * @param callback 分享结果回调，返回ShareResponse
     */
    fun shareToKuaishou(activity: Activity, content: ShareContent, callback: (ShareResponse) -> Unit)
    
    /**
     * 系统分享（调用系统分享菜单）
     * 
     * @param activity Activity上下文
     * @param content 分享内容
     * @param callback 分享结果回调，返回ShareResponse
     */
    fun shareToSystem(activity: Activity, content: ShareContent, callback: (ShareResponse) -> Unit)
}

