package com.lukouguoji.module_base.bean

import androidx.databinding.ObservableBoolean
import java.io.Serializable

/**
 * 国际出港板箱过磅-ULD使用记录Bean
 * 对应API: IntExpWeighting/pageQuery
 */
class GjcUldUseBean : Serializable {
    var useId: Long = 0                 // 使用id
    var uld: String = ""                // uld编号
    var carId: String = ""              // 板车号
    var carWeight: Double = 0.0         // 板车重量
    var cargoType: String = ""          // 货物类型
    var cargoWeight: Double = 0.0       // 货重
    var netWeight: Double = 0.0         // 装机重量
    var totalWeight: Double = 0.0       // 总重
    var uldWeight: Double = 0.0         // uld重量
    var consumeWeight: Double = 0.0     // 耗材重量
    var volume: Double = 0.0            // 体积
    var maxVolume: Double = 0.0         // uld最大容积
    var maxWeight: Double = 0.0         // uld最大载重

    var fdate: String = ""              // 航班日期
    var fno: String = ""                // 航班号
    var fdep: String = ""               // 起始站
    var fdest: String = ""              // 目的港
    var fClose: String = ""             // 航班关闭时间
    var flight: String = ""             // 航班信息
    var transArea: String = ""          // 库位号

    // 格式化后的航班日期(只保留年月日)
    val fdateFormatted: String
        get() = if (fdate.contains(" ")) fdate.split(" ")[0] else fdate

    var wtId: String = ""               // 过磅人ID
    var wtUsername: String = ""         // 过磅人
    var wtDate: String = ""             // 过磅时间

    var ldId: String = ""               // 组装人ID
    var ldUserName: String = ""         // 组装人
    var ldDate: String = ""             // 组装时间

    var hoId: String = ""               // 交接人ID
    var hoUserName: String = ""         // 交接人
    var hoDate: String = ""             // 交接时间

    var boardType: String = ""          // 板型
    var uldCarrier: String = ""         // uld所属航司
    var uldFlag: String = ""            // uld分类
    var status: String = ""             // uld状态：0：正常，1：故障
    var dgrCode: String = ""            // IMP代码
    var height: String = ""             // 高度
    var passageway: String = ""         // 通道号
    var passagewayId: String = ""
    var passagewayName: String = ""     // 通道号(中文)
    var plClose: String = ""            // 探板/收口
    var plCloseSize: String = ""        // 探板尺寸(CM)
    var location: String = ""           // 位置
    var pieces: String = ""             // 件数(字符串格式)
    var remark: String = ""             // 备注
    var checkFlag: String = ""          // 检查标记
    var emptyUld: String = ""           // 空ULD

    var loadArea: String = ""           // 组装区
    var pc: Long = 0                    // 组装件数
    var fillWeightFlag: String = ""     // 回填状态：0-未回填，1-部分回填，2-已回填

    // 回填状态文本
    val fillWeightFlagText: String
        get() = when (fillWeightFlag) {
            "0" -> "未回填"
            "1" -> "部分回填"
            "2" -> "已回填"
            else -> ""
        }

    // 回填状态是否显示绿色（已回填时显示绿色）
    val isFillWeightGreen: Boolean
        get() = fillWeightFlag == "2"

    // ========== 出港组装页面扩展字段 ==========
    var isExpanded: Boolean = false                          // 展开状态(旧版保留)
    @Transient
    val checked: ObservableBoolean = ObservableBoolean(false) // 选中状态(Observable)
    @Transient
    val showMore: ObservableBoolean = ObservableBoolean(false) // 展开状态(Observable)
    @Transient
    val isLoading: ObservableBoolean = ObservableBoolean(false) // 子列表加载中状态
    @Transient
    var waybillDetailsLoaded: Boolean = false                // 子列表是否已加载过（用于区分"未加载"和"加载后为空"）
    var waybillDetails: MutableList<GjcWarehouse>? = null   // 运单明细缓存

    // 子列表是否有数据
    val hasWaybillDetails: Boolean
        get() = waybillDetails != null && waybillDetails!!.isNotEmpty()

    // 是否显示"暂无数据"（已加载但无数据）
    val showEmptyView: Boolean
        get() = waybillDetailsLoaded && !hasWaybillDetails

    // 兼容原有代码的isSelected属性
    var isSelected: Boolean
        get() = checked.get()
        set(value) = checked.set(value)

    // 复磅状态文本
    val wtStatusText: String
        get() = if (wtDate.isNotEmpty()) "已复磅" else "未复磅"

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

    /** 是否已交接：有交接时间即视为已交接 */
    val isHandovered: Boolean
        get() = hoDate.isNotEmpty()

    /**
     * IMP 代码是否属于危险品类 —— 决定手机版卡片上 IMP 代码标签是红底还是绿底。
     *
     * 依据 IATA IMP 特货代码惯例：以 R 开头（RFL/RRY/REX 等）及 ICE 归为危险品。
     * 若后端另有判定口径，只需改这一处。
     */
    val isDgrDangerous: Boolean
        get() = dgrCode.startsWith("R", ignoreCase = true) || dgrCode.equals("ICE", ignoreCase = true)
}
