package com.lukouguoji.module_base.bean

import androidx.databinding.BaseObservable
import androidx.databinding.Bindable
import androidx.databinding.library.baseAdapters.BR

/**
 * 国际出港计重记录明细Bean
 * 用于：加载运单的所有计重记录 + 批量更新
 * 对应API:
 * - POST /IntExpCheckIn/listRecordByWh (加载)
 * - POST /IntExpCheckIn/updateRecordList (保存)
 */
data class GjcCheckInRecord(
    var id: Long = 0,              // 收运记录id
    var maWbId: Long = 0,          // GJC_MAWB.MAWBID
    var no: String = "",           // 运单号
    var prefix: String = "",       // 运单前缀
    var opDate: String = "",       // 操作时间
    var opId: String = "",         // 操作员id
    var pc: Long = 0,              // 运抵件数
    var weight: Double = 0.0,      // 运抵重量
    var volume: Double = 0.0,      // 运抵体积
    var whId: Long = 0,            // GJC_WAREHOUSE.ID
    var carWeight: String = ""     // 托盘自重
) : BaseObservable() {

    // 数据变化回调
    var onDataChanged: (() -> Unit)? = null

    // 件数的字符串表示（用于双向绑定）
    @get:Bindable
    var pcStr: String
        get() = if (pc == 0L) "" else pc.toString()
        set(value) {
            val newPc = value.toLongOrNull() ?: 0L
            if (pc != newPc) {
                pc = newPc
                notifyPropertyChanged(BR.pcStr)
                onDataChanged?.invoke()
            }
        }

    // 重量的字符串表示（用于双向绑定）
    @get:Bindable
    var weightStr: String
        get() = if (weight == 0.0) "" else weight.toString()
        set(value) {
            val newWeight = value.toDoubleOrNull() ?: 0.0
            if (weight != newWeight) {
                weight = newWeight
                notifyPropertyChanged(BR.weightStr)
                onDataChanged?.invoke()
            }
        }

    // 托盘自重的字符串表示（用于双向绑定，5.5寸手机版「修改记录」覆层）
    @get:Bindable
    var carWeightStr: String
        get() = carWeight
        set(value) {
            if (carWeight != value) {
                carWeight = value
                notifyPropertyChanged(BR.carWeightStr)
                onDataChanged?.invoke()
            }
        }
}
