package com.narutohuo.xindazhou.core.share

import android.app.Activity
import android.content.Intent

/**
 * 分享服务接口
 * 
 * 用于 base-core 与 share 模块之间的解耦
 * share 模块需要实现此接口，并通过 ARouter 注册
 * 
 * 注意：为了解耦，接口方法使用基本类型，具体类型由实现类处理
 */
interface IShareService {
    
    /**
     * 初始化分享服务
     * 
     * @param context Application 上下文
     * @param umengAppKey 友盟 AppKey（可选，如果为空则从资源文件读取）
     * @param umengChannel 友盟渠道（可选，默认为 "developer-default"）
     * @param weChatAppId 微信 AppID（可选）
     * @param weChatAppSecret 微信 AppSecret（可选）
     * @param qqAppId QQ AppID（可选）
     * @param qqAppKey QQ AppKey（可选）
     * @param weiboAppKey 微博 AppKey（可选）
     * @param weiboAppSecret 微博 AppSecret（可选）
     * @param weiboRedirectUrl 微博回调地址（可选）
     */
    fun initialize(
        context: android.content.Context,
        umengAppKey: String? = null,
        umengChannel: String = "developer-default",
        weChatAppId: String? = null,
        weChatAppSecret: String? = null,
        qqAppId: String? = null,
        qqAppKey: String? = null,
        weiboAppKey: String? = null,
        weiboAppSecret: String? = null,
        weiboRedirectUrl: String? = null
    )
    
    /**
     * 处理分享回调（内部使用）
     * 
     * @param activity Activity 上下文
     * @param requestCode 请求码
     * @param resultCode 结果码
     * @param data Intent 数据
     */
    fun onActivityResult(activity: Activity, requestCode: Int, resultCode: Int, data: Intent?)
    
    /**
     * 释放资源
     * 
     * @param activity Activity 上下文
     */
    fun release(activity: Activity)
    
    /**
     * 统一分享方法（推荐使用）
     * 
     * @param activity Activity上下文
     * @param title 分享标题
     * @param description 分享描述
     * @param url 分享链接（可选）
     * @param imageUrl 图片URL（可选）
     * @param thumbImageUrl 缩略图URL（可选）
     * @param platform 分享平台（可选，如果为 null 则显示分享弹窗）
     * @param callback 分享结果回调
     *                 参数：success (Boolean), platform (String?), errorMessage (String?)
     */
    fun share(
        activity: Activity,
        title: String,
        description: String,
        url: String? = null,
        imageUrl: String? = null,
        thumbImageUrl: String? = null,
        platform: String? = null,
        callback: (Boolean, String?, String?) -> Unit
    )
    
    /**
     * 手动分享方法（内部使用，避免递归调用）
     * 
     * @param activity Activity上下文
     * @param title 分享标题
     * @param description 分享描述
     * @param url 分享链接（可选）
     * @param imageUrl 图片URL（可选）
     * @param thumbImageUrl 缩略图URL（可选）
     * @param platform 分享平台（可选，如果为 null 则显示分享弹窗）
     * @param callback 分享结果回调
     */
    fun shareManual(
        activity: Activity,
        title: String,
        description: String,
        url: String? = null,
        imageUrl: String? = null,
        thumbImageUrl: String? = null,
        platform: String? = null,
        callback: (Boolean, String?, String?) -> Unit
    )
    
    /**
     * 显示分享弹窗（从底部弹出）
     * 
     * @param activity Activity上下文
     * @param title 分享标题
     * @param description 分享描述
     * @param url 分享链接（可选）
     * @param imageUrl 图片URL（可选）
     * @param thumbImageUrl 缩略图URL（可选）
     * @param callback 分享结果回调
     */
    fun showShareDialog(
        activity: Activity,
        title: String,
        description: String,
        url: String? = null,
        imageUrl: String? = null,
        thumbImageUrl: String? = null,
        callback: (Boolean, String?, String?) -> Unit
    )
    
    /**
     * 分享到微信
     * 
     * @param activity Activity上下文
     * @param title 分享标题
     * @param description 分享描述
     * @param url 分享链接（可选）
     * @param imageUrl 图片URL（可选）
     * @param thumbImageUrl 缩略图URL（可选）
     * @param callback 分享结果回调
     */
    fun shareToWeChat(
        activity: Activity,
        title: String,
        description: String,
        url: String? = null,
        imageUrl: String? = null,
        thumbImageUrl: String? = null,
        callback: (Boolean, String?, String?) -> Unit
    )
    
    /**
     * 分享到微信朋友圈
     * 
     * @param activity Activity上下文
     * @param title 分享标题
     * @param description 分享描述
     * @param url 分享链接（可选）
     * @param imageUrl 图片URL（可选）
     * @param thumbImageUrl 缩略图URL（可选）
     * @param callback 分享结果回调
     */
    fun shareToWeChatMoments(
        activity: Activity,
        title: String,
        description: String,
        url: String? = null,
        imageUrl: String? = null,
        thumbImageUrl: String? = null,
        callback: (Boolean, String?, String?) -> Unit
    )
    
    /**
     * 分享到QQ
     * 
     * @param activity Activity上下文
     * @param title 分享标题
     * @param description 分享描述
     * @param url 分享链接（可选）
     * @param imageUrl 图片URL（可选）
     * @param thumbImageUrl 缩略图URL（可选）
     * @param callback 分享结果回调
     */
    fun shareToQQ(
        activity: Activity,
        title: String,
        description: String,
        url: String? = null,
        imageUrl: String? = null,
        thumbImageUrl: String? = null,
        callback: (Boolean, String?, String?) -> Unit
    )
    
    /**
     * 分享到QQ空间
     * 
     * @param activity Activity上下文
     * @param title 分享标题
     * @param description 分享描述
     * @param url 分享链接（可选）
     * @param imageUrl 图片URL（可选）
     * @param thumbImageUrl 缩略图URL（可选）
     * @param callback 分享结果回调
     */
    fun shareToQZone(
        activity: Activity,
        title: String,
        description: String,
        url: String? = null,
        imageUrl: String? = null,
        thumbImageUrl: String? = null,
        callback: (Boolean, String?, String?) -> Unit
    )
    
    /**
     * 分享到微博
     * 
     * @param activity Activity上下文
     * @param title 分享标题
     * @param description 分享描述
     * @param url 分享链接（可选）
     * @param imageUrl 图片URL（可选）
     * @param thumbImageUrl 缩略图URL（可选）
     * @param callback 分享结果回调
     */
    fun shareToWeibo(
        activity: Activity,
        title: String,
        description: String,
        url: String? = null,
        imageUrl: String? = null,
        thumbImageUrl: String? = null,
        callback: (Boolean, String?, String?) -> Unit
    )
    
    /**
     * 分享到抖音
     * 
     * @param activity Activity上下文
     * @param title 分享标题
     * @param description 分享描述
     * @param url 分享链接（可选）
     * @param imageUrl 图片URL（可选）
     * @param thumbImageUrl 缩略图URL（可选）
     * @param callback 分享结果回调
     */
    fun shareToDouyin(
        activity: Activity,
        title: String,
        description: String,
        url: String? = null,
        imageUrl: String? = null,
        thumbImageUrl: String? = null,
        callback: (Boolean, String?, String?) -> Unit
    )
    
    /**
     * 分享到小红书
     * 
     * @param activity Activity上下文
     * @param title 分享标题
     * @param description 分享描述
     * @param url 分享链接（可选）
     * @param imageUrl 图片URL（可选）
     * @param thumbImageUrl 缩略图URL（可选）
     * @param callback 分享结果回调
     */
    fun shareToXiaohongshu(
        activity: Activity,
        title: String,
        description: String,
        url: String? = null,
        imageUrl: String? = null,
        thumbImageUrl: String? = null,
        callback: (Boolean, String?, String?) -> Unit
    )
    
    /**
     * 分享到快手
     * 
     * @param activity Activity上下文
     * @param title 分享标题
     * @param description 分享描述
     * @param url 分享链接（可选）
     * @param imageUrl 图片URL（可选）
     * @param thumbImageUrl 缩略图URL（可选）
     * @param callback 分享结果回调
     */
    fun shareToKuaishou(
        activity: Activity,
        title: String,
        description: String,
        url: String? = null,
        imageUrl: String? = null,
        thumbImageUrl: String? = null,
        callback: (Boolean, String?, String?) -> Unit
    )
    
    /**
     * 系统分享（调用系统分享菜单）
     * 
     * @param activity Activity上下文
     * @param title 分享标题
     * @param description 分享描述
     * @param url 分享链接（可选）
     * @param imageUrl 图片URL（可选）
     * @param thumbImageUrl 缩略图URL（可选）
     * @param callback 分享结果回调
     */
    fun shareToSystem(
        activity: Activity,
        title: String,
        description: String,
        url: String? = null,
        imageUrl: String? = null,
        thumbImageUrl: String? = null,
        callback: (Boolean, String?, String?) -> Unit
    )
}

