package com.lukouguoji.module_base.ui.weight.phone

import android.content.Context
import android.util.AttributeSet
import android.view.Gravity
import android.widget.LinearLayout
import android.widget.TextView
import androidx.core.content.ContextCompat
import com.lukouguoji.module_base.R

/**
 * 手机版详情页字段项（5.5 寸手持端公共组件）
 *
 * 竖排「小号灰标签（12sp）+ 数值（15sp）」，用于详情页两列信息网格。
 * 对应设计稿「板箱详情」等详情卡片内的字段。
 *
 * XML 用法：
 * ```xml
 * <com.lukouguoji.module_base.ui.weight.phone.PhoneKvItem
 *     android:layout_width="0dp"
 *     android:layout_height="wrap_content"
 *     android:layout_weight="1"
 *     title="@{`装机重`}"
 *     value="@{bean.netWeight}" />
 * ```
 *
 * 需要突出的字段（如库位）设 `tag="@{true}"`，数值会渲染为橙色高亮标签。
 */
class PhoneKvItem @JvmOverloads constructor(
    context: Context,
    attrs: AttributeSet? = null,
    defStyleAttr: Int = 0
) : LinearLayout(context, attrs, defStyleAttr) {

    val tvTitle: TextView
    val tvValue: TextView

    var title: String = ""
        set(v) {
            field = v
            tvTitle.text = v
        }

    var value: String = ""
        set(v) {
            field = v
            // 详情页空值统一显示为 "-"，与设计稿一致
            tvValue.text = v.ifEmpty { "-" }
            applyStyle()
        }

    /** 是否以橙色高亮标签样式展示数值 */
    var tag: Boolean = false
        set(v) {
            field = v
            applyStyle()
        }

    /** 高亮标签配色："orange"（默认，如库位）/ "green"（如海关放行正常态） */
    var tagColor: String = "orange"
        set(v) {
            field = v
            applyStyle()
        }

    /**
     * 空值不套高亮标签底 —— 否则占位符 "-"/"--" 会显示成一个孤零零的色块。
     */
    private fun applyStyle() {
        if (tag && value.isNotEmpty() && value != "-" && value != "--") {
            if (tagColor == "green") {
                tvValue.setBackgroundResource(R.drawable.bg_phone_tag_green)
                tvValue.setTextColor(ContextCompat.getColor(context, R.color.phone_tag_green_text))
            } else {
                tvValue.setBackgroundResource(R.drawable.bg_phone_value_orange)
                tvValue.setTextColor(ContextCompat.getColor(context, R.color.phone_orange_text))
            }
            tvValue.setTypeface(tvValue.typeface, android.graphics.Typeface.BOLD)
            val padH = (4 * resources.displayMetrics.density).toInt()
            tvValue.setPadding(padH, 0, padH, 0)
        } else {
            tvValue.background = null
            tvValue.setTextColor(ContextCompat.getColor(context, R.color.phone_text_title))
            tvValue.setPadding(0, 0, 0, 0)
        }
    }

    init {
        orientation = VERTICAL

        tvTitle = TextView(context).apply {
            textSize = 12f
            setTextColor(ContextCompat.getColor(context, R.color.phone_text_hint))
        }
        addView(
            tvTitle,
            LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)
        )

        tvValue = TextView(context).apply {
            textSize = 15f
            setTextColor(ContextCompat.getColor(context, R.color.phone_text_title))
        }
        addView(
            tvValue,
            LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT).apply {
                topMargin = (2 * resources.displayMetrics.density).toInt()
                gravity = Gravity.START
            }
        )
    }
}
