package com.adealink.weparty.commonui.text

import android.widget.TextView
import kotlin.math.min

fun TextView.isEllipsized(maxLines: Int = this.maxLines): Boolean {
    if (maxLines <= 0) return false

    val layout = this.layout ?: return false

    // 如果没有设置省略方式，直接返回
    if (ellipsize == null) return false

    // 检查是否有省略标记
    for (i in 0 until min(layout.lineCount, maxLines)) {
        val lineEnd = layout.getLineEnd(i)
        // 如果这一行的结尾不是文本的结尾，说明被截断了
        if (lineEnd < text.length) {
            // 检查是否有省略字符
            val lineText = text.subSequence(layout.getLineStart(i), lineEnd)
            if (lineText.contains("…") || lineText.contains("...")) {
                return true
            }
        }
    }

    // 检查行数是否超过限制
    return layout.lineCount > maxLines
}

// 获取省略的位置
fun TextView.getEllipsisCount(maxLines: Int): Int {
    if (maxLines <= 0) return 0

    return layout?.let { layout ->
        if (maxLines > 0 && layout.lineCount >= maxLines) {
            val lastLine = maxLines - 1
            val lineEnd = layout.getLineEnd(lastLine)
            val textLength = text.length

            if (lineEnd < textLength) {
                // 被省略的字符数
                return@let textLength - lineEnd
            }
        }
        0
    } ?: 0
}