package com.aiosman.ravenow.utils

import com.aiosman.ravenow.AppState
import com.google.gson.Gson
import com.google.gson.JsonSyntaxException
import io.openim.android.sdk.models.Message

/**
 * OpenIM 消息解析工具类
 * 用于解析 ConversationInfo 中的 latestMsg JSON 字符串
 */
object MessageParser {
    
    /**
     * 解析最新消息的显示文本和发送者信息
     * @param latestMsgJson 最新消息的JSON字符串
     * @return Pair<displayText, isSelf> 显示文本和是否是自己发送的消息
     */
    fun parseLatestMessage(latestMsgJson: String?): Pair<String, Boolean> {
        var displayText = ""
        var isSelf = false
        
        try {
            if (!latestMsgJson.isNullOrEmpty()) {
                val gson = Gson()
                val message = gson.fromJson(latestMsgJson, Message::class.java)
                
                // 判断是否是自己发送的消息
                isSelf = message.sendID == AppState.profile?.trtcUserId
                
                // 根据消息类型生成显示文本
                displayText = getMessageDisplayText(message)
            } else {
                displayText = "[暂无消息]"
            }
        } catch (e: JsonSyntaxException) {
            // JSON 解析失败，使用原始文本
            displayText = latestMsgJson ?: "[消息解析失败]"
        } catch (e: Exception) {
            // 其他异常
            displayText = "[消息]"
        }
        
        return Pair(displayText, isSelf)
    }
    
    /**
     * 根据消息类型获取显示文本
     * @param message OpenIM Message 对象
     * @return 消息的显示文本
     */
    private fun getMessageDisplayText(message: Message): String {
        return when (message.contentType) {
            101 -> { // TEXT
                message.textElem?.content ?: "[文本消息]"
            }
            102 -> "[图片]" // IMAGE
            103 -> "[语音]" // AUDIO
            104 -> "[视频]" // VIDEO
            105 -> "[文件]" // FILE
            106 -> "[位置]" // LOCATION
            107 -> "[自定义消息]" // CUSTOM
            108 -> "[合并消息]" // MERGE
            109 -> "[名片]" // CARD
            110 -> "[引用消息]" // QUOTE
            else -> "[消息]"
        }
    }
}
