package com.lukouguoji.module_base.bean

import androidx.databinding.ObservableBoolean
import com.lukouguoji.module_base.ktx.noNull
import dev.utils.DevFinal
import dev.utils.common.DateUtils

/**
 * 国际出港待计重-列表数据Bean
 * 对应API: IntExpCheckIn/pageQuery
 * 对应API返回类型: GjcMaWb
 */
class GjcWeighingBean {
    var maWbId: Long = 0                // 运单主键ID
    var no: String = ""                 // 运单号
    var prefix: String = ""             // 运单前缀
    var wbNo: String = ""               // 11位运单号
    var oldNo: String = ""              // 旧运单号
    var oldPrefix: String = ""          // 旧运单前缀

    var agentCode: String = ""          // 代理人code
    var agentName: String = ""          // 代理人名称

    var fid: Long = 0                   // 航班主键id
    var fdate: String = ""              // 航班日期
    var fno: String = ""                // 航班号
    var flight: String = ""             // 航班: 航班日期/航班号
    var fclose: String = ""             // 航班关闭时间
    var scheduledTackOff: String = ""   // 计划起飞时间
    var scheduledArrival: String = ""   // 预计到达时间

    var range: String = ""              // 航程
    var dep: String = ""                // 始发站
    var dest: String = ""               // 最终目的站
    var dest1: String = ""              // 第一目的站
    var dest2: String = ""              // 第二目的站

    var pc: Long = 0                    // 预配件数
    var weight: Double = 0.0            // 预配重量
    var volume: Double = 0.0            // 预配体积

    var arrivePc: Long = 0              // 运抵件数
    var arriveWeight: Double = 0.0      // 运抵重量
    var arriveVolume: Double = 0.0      // 运抵体积
    var arriveFlag: String = ""         // 运抵状态（0：正常运抵，1：提前运抵）

    var spCode: String = ""             // 特码
    var subCode: String = ""            // 子码
    var goods: String = ""              // 品名（英）
    var goodsCn: String = ""            // 品名（中）
    var businessType: String = ""       // 业务类型
    var businessName: String = ""       // 业务类型名称（中）
    var awbType: String = ""            // 运单类型
    var awbName: String = ""            // 运单类型名称（中）

    var checkIn: String = ""            // 收运状态。0：待收运，1：已收运，2：收运中
    var reviewStatus: String = ""       // 审核状态（0：未审核；1：通过；2：退回）
    var declareStatus: String = ""      // 申报状态

    var carId: String = ""              // 平板车号
    var carNumber: String = ""          // 车牌号
    var cargoType: String = ""          // 货物类型
    var packageType: String = ""        // 包装类型
    var origin: String = ""             // 货源地
    var unNumber: String = ""           // UN编号

    var consignee: String = ""          // 收货人
    var cneeTel: String = ""            // 收货人电话

    var by0: String = ""                // 第一承运人
    var by1: String = ""                // 第二承运人
    var by2: String = ""                // 第三承运人

    var opId: String = ""               // 操作员id
    var opDate: String = ""             // 操作时间
    var paperTime: String = ""          // 单据时间

    var remark: String = ""             // 备注
    var ffmMemo: String = ""            // ffm备注
    var mftMemo: String = ""            // mft备注
    var billsNo: String = ""            // 提单号

    var haWbNumber: Int = 0             // 分单数
    var storageUseNumber: Int = 0       // 库位使用数
    var recheckCount: Long = 0          // 复核次数

    var customsLib: String = ""         // 代理人lib
    var tranFlag: String = ""           // 转运标识
    var activeId: Long = 0              // 有效值

    var cityName: String = ""           // 城市名称
    var proName: String = ""            // 省份名称
    var areaName: String = ""           // 区域名称

    // 关联列表（可选，根据需要使用）
    var haWbList: List<Any>? = null         // 分单列表
    var storageUseList: List<Any>? = null   // 库位使用列表
    var attachList: List<Any>? = null       // 附件列表

    // ========== UI扩展字段 ==========
    val checked: ObservableBoolean = ObservableBoolean(false)  // 选中状态

    // 兼容现有API的isSelected属性
    var isSelected: Boolean
        get() = checked.get()
        set(value) = checked.set(value)

    /**
     * 预计起飞时间 - 仅时分格式 (HH:mm)
     */
    val scheduledTackOffHM: String
        get() {
            return DateUtils.parseString(
                scheduledTackOff,
                DevFinal.TIME.yyyyMMddHHmmss_HYPHEN,
                "HH:mm"
            ).noNull(scheduledTackOff)
        }

    /**
     * 验证预计起飞时间是否为次日
     */
    fun verifyScheduledTackOffNextDay(): Boolean {
        if (fdate.isEmpty() || scheduledTackOff.isEmpty()) {
            return false
        }
        return try {
            val calendarFDate = DateUtils.getCalendar(fdate, DevFinal.TIME.yyyyMMdd_HYPHEN)
            val calendarTakeOff = DateUtils.getCalendar(scheduledTackOff, DevFinal.TIME.yyyyMMddHHmmss_HYPHEN)
            DateUtils.getDay(calendarTakeOff) > DateUtils.getDay(calendarFDate)
        } catch (e: Exception) {
            false
        }
    }
}
