package com.narutohuo.xindazhou.share.model

import android.os.Parcelable
import kotlinx.parcelize.Parcelize

/**
 * 分享响应模型（统一结构）
 * 
 * 遵循统一设计：success, data, errorCode, errorMessage, timestamp
 */
@Parcelize
data class ShareResponse(
    /**
     * 是否成功
     */
    val success: Boolean,
    
    /**
     * 响应数据（分享平台）
     */
    val data: SharePlatform? = null,
    
    /**
     * 错误码（如果有错误）
     */
    val errorCode: Int? = null,
    
    /**
     * 错误消息（如果有错误）
     */
    val errorMessage: String? = null,
    
    /**
     * 时间戳
     */
    val timestamp: Long = System.currentTimeMillis()
) : Parcelable

/**
 * 分享平台
 */
@Parcelize
enum class SharePlatform : Parcelable {
    WECHAT,         // 微信
    WECHAT_MOMENTS, // 微信朋友圈
    QQ,             // QQ
    QZONE,          // QQ空间
    WEIBO,          // 新浪微博
    DOUYIN,         // 抖音
    XIAOHONGSHU,    // 小红书
    KUAISHOU,       // 快手
    SYSTEM          // 系统分享
}

/**
 * 分享内容模型
 * 
 * 使用 Builder 模式构建，支持灵活的参数组合
 */
@Parcelize
data class ShareContent(
    /**
     * 标题
     */
    val title: String,
    
    /**
     * 内容描述
     */
    val description: String,
    
    /**
     * 分享平台类型（可选，如果指定则直接分享到该平台，否则显示分享弹窗）
     */
    val platform: SharePlatform? = null,
    
    /**
     * 分享链接
     */
    val url: String? = null,
    
    /**
     * 图片URL或本地路径
     */
    val imageUrl: String? = null,
    
    /**
     * 缩略图URL或本地路径
     */
    val thumbImageUrl: String? = null
) : Parcelable {
    /**
     * ShareContent Builder
     * 
     * 使用示例：
     * ```kotlin
     * // 方式1：指定平台，直接分享
     * val content = ShareContent.builder()
     *     .setTitle("分享标题")
     *     .setDescription("分享描述")
     *     .setPlatform(SharePlatform.WECHAT)
     *     .setUrl("https://example.com")
     *     .build()
     * shareService.share(activity, content, callback)
     * 
     * // 方式2：不指定平台，显示分享弹窗
     * val content = ShareContent.builder()
     *     .setTitle("分享标题")
     *     .setDescription("分享描述")
     *     .setUrl("https://example.com")
     *     .build()
     * shareService.share(activity, content, callback)
     * ```
     */
    class Builder {
        private var title: String = ""
        private var description: String = ""
        private var platform: SharePlatform? = null
        private var url: String? = null
        private var imageUrl: String? = null
        private var thumbImageUrl: String? = null
        
        /**
         * 设置标题（必填）
         */
        fun setTitle(title: String): Builder {
            this.title = title
            return this
        }
        
        /**
         * 设置描述（必填）
         */
        fun setDescription(description: String): Builder {
            this.description = description
            return this
        }
        
        /**
         * 设置分享平台（可选）
         * 如果设置，则直接分享到该平台；如果不设置，则显示分享弹窗让用户选择
         */
        fun setPlatform(platform: SharePlatform?): Builder {
            this.platform = platform
            return this
        }
        
        /**
         * 设置分享链接（可选）
         */
        fun setUrl(url: String?): Builder {
            this.url = url
            return this
        }
        
        /**
         * 设置图片URL或本地路径（可选）
         */
        fun setImageUrl(imageUrl: String?): Builder {
            this.imageUrl = imageUrl
            return this
        }
        
        /**
         * 设置缩略图URL或本地路径（可选）
         */
        fun setThumbImageUrl(thumbImageUrl: String?): Builder {
            this.thumbImageUrl = thumbImageUrl
            return this
        }
        
        /**
         * 构建 ShareContent 对象
         * 
         * @throws IllegalArgumentException 如果 title 或 description 为空
         */
        fun build(): ShareContent {
            require(title.isNotBlank()) { "标题不能为空" }
            require(description.isNotBlank()) { "描述不能为空" }
            return ShareContent(
                title = title,
                description = description,
                platform = platform,
                url = url,
                imageUrl = imageUrl,
                thumbImageUrl = thumbImageUrl
            )
        }
    }
    
    companion object {
        /**
         * 创建 Builder 实例
         */
        @JvmStatic
        fun builder(): Builder = Builder()
    }
}

