package com.lukouguoji.module_base.bean

import androidx.databinding.ObservableBoolean
import com.lukouguoji.module_base.interfaces.ICheck
import java.io.Serializable

/**
 * 国际出港移库Bean
 */
data class GjcMove(
    var no: String = "",                  // ID
    var prefix: String = "",              // 运单前缀
    var wbNo: String = "",                // 运单号
    var pc: Long = 0,                     // 件数
    var weight: Double = 0.0,             // 重量
    var volume: Double = 0.0,             // 体积

    var dep: String = "",                 // 起运港
    var dest: String = "",                // 目的港
    var dest1: String = "",               // 卸货站1
    var dest2: String = "",               // 卸货站2
    var by1: String = "",                 // 承运人1
    var by2: String = "",                 // 承运人2

    var awbType: String = "",             // 运单类型编码
    var awbTypeName: String = "",         // 运单类型名称
    var businessType: String = "",        // 业务类型
    var moveState: Int = 0,               // 移库状态（0-未移交，1-已移交）
    var goods: String = "",               // 品名（英文）
    var goodsCn: String = "",             // 品名（中文）
    var agentName: String = "",           // 代理人
    var agentCode: String = "",           // 代理代码
    var spCode: String = "",              // SP代码
    var subCode: String = "",             // 子代码
    var packageType: String = "",         // 包装类型
    var cargoType: String = "",           // 货物类型
    var origin: String = "",              // 始发地

    var maWbId: Long = 0,                 // GJC_MAWB.MAWBID
    var moveId: String = "",              // 移动ID
    var opId: String = "",                // 操作人ID
    var opdate: String = "",              // 操作日期
    var remark: String = "",              // 备注
    var likeNo: String = "",              // 部分运单号no（模糊查询）

    var range: String = "",

    // UI扩展字段 - 使用ObservableBoolean实现自动UI更新
    val checked: ObservableBoolean = ObservableBoolean(false)
) : Serializable, ICheck {

    // 实现ICheck接口
    override fun getCheckObservable(): ObservableBoolean = checked

    // 兼容现有代码的属性（如果其他地方使用isSelected）
    var isSelected: Boolean
        get() = checked.get()
        set(value) = checked.set(value)

    // ========== 5.5 寸手持端展示辅助字段（仅用于手机版布局，不参与序列化） ==========

    /** 是否已移库（moveState：0-未移交，1-已移交） */
    val isMoved: Boolean
        get() = moveState == 1

    /** 品名：优先中文，为空回退英文 */
    val goodsName: String
        get() = goodsCn.ifEmpty { goods }

    /**
     * 详情页字段统一空值占位。
     * 接口对 businessType / opdate / opId 等字段常返回 null，
     * 直接绑会显示成 "null" 或空白，这里统一成 "-"。
     */
    fun orDash(value: String?): String = if (value.isNullOrEmpty()) "-" else value
}
