package com.lukouguoji.module_base.bean

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

class GncDistributionBean : ICheck {
//    0:出港，1：进港
    var status: String = ""

    // 截载状态 0未截载、1已截载
    var activited: String = "" // 0

    // 分配状态 0：未分配，1：已分配
    var allocationStatus: String = "" // 0

    var allocationDate: String = ""

    val allocationStatusName: String
        get() {
            return when (allocationStatus) {
                "0" -> "未分配"
                "1" -> "已分配"
                else -> ""
            }
        }

    // 板型
    var boardType: String = "" // null

    // 平板车号-必填
    var carId: String = "" // 012

    // 平板车自重量-必填
    var carWeight: String = "" // null

    // 货物类型(C-货物,M-邮件,X-空板箱)
    var cargoType: String = "" // null

    // 货重-必填
    var cargoWeight: String = "" // 300

    // 承运人
    var carrier: String = "" // MU

    // 板车状态-0未复磅、1已复磅
    var checkFlag: String = "" // null

    val checkFlagName: String
        get() {
            return when (checkFlag) {
                "0" -> "未复磅"
                "1" -> "已复磅"
                "2" -> "二次复磅"
                else -> ""
            }
        }

    // 复磅操作时间
    var copDate: String = "" // null

    // 复磅人
    var copId: String = "" // null

    // 转运司机
    var driver: String = "" // null

    // 初始被分配司机
    var allocationDriver: String = "" // null

    // 预计起飞时间
    var estimatedTakeOff: String = "" // null

    val estimatedTakeOffHM: String
        get() {
            return DateUtils.parseString(
                estimatedTakeOff,
                DevFinal.TIME.yyyyMMddHHmmss_HYPHEN,
                "HH:mm"
            ).noNull(estimatedTakeOff)
        }

    /**
     * 校验起飞时间是否明天
     */
    fun verifyTakeOffNextDay(): Boolean {
        if (fdate.isEmpty() || estimatedTakeOff.isEmpty()) {
            return false
        }
        val calendarFDate = DateUtils.getCalendar(fdate, DevFinal.TIME.yyyyMMdd_HYPHEN)
        val calendarTakeOff =
            DateUtils.getCalendar(estimatedTakeOff, DevFinal.TIME.yyyyMMddHHmmss_HYPHEN)
        return DateUtils.getDay(calendarTakeOff) > DateUtils.getDay(calendarFDate)
    }
    // 预计起飞时间
    var scheduledTackOff: String = "" // null

    val scheduledTackOffHM: String
        get() {
            return DateUtils.parseString(
                scheduledTackOff,
                DevFinal.TIME.yyyyMMddHHmmss_HYPHEN,
                "HH:mm"
            ).noNull(scheduledTackOff)
        }

    /**
     * 校验起飞时间是否明天
     */
    fun verifyscheduledTackOffNextDay(): Boolean {
        if (fdate.isEmpty() || estimatedTakeOff.isEmpty()) {
            return false
        }
        val calendarFDate = DateUtils.getCalendar(fdate, DevFinal.TIME.yyyyMMdd_HYPHEN)
        val calendarTakeOff =
            DateUtils.getCalendar(estimatedTakeOff, DevFinal.TIME.yyyyMMddHHmmss_HYPHEN)
        return DateUtils.getDay(calendarTakeOff) > DateUtils.getDay(calendarFDate)
    }

    // 航班关闭时间
    var fclose: String = "" // 0001-01-01 00:00:00

    // 航班日期
    var fdate: String = "" // 2024-04-11

    // 起始站
    var fdep: String = "" // null

    // 目的站
    var fdest: String = "" // PEK

    // 航班
    var flight: String = "" // null
        get() {
            if (field.isEmpty()) {
                field = "$fdate/$fno"
            }
            return field
        }

    // 航班号
    var fno: String = "" // MU2023


    var mftFno: String = "" // MU2023
        get() {
            if (activited != "1") {
                field = ""
            }
            return field
        }

    var mftFdate: String = ""
        get() {
            if (activited != "1") {
                field = ""
            }
            return field
        }

    var mftFid: String = ""

    val compareMftFlight: Boolean
        get () {
            return fno == mftFno && fdate == mftFdate
        }


    // 装机单备注
    var ldRemark: String = "" // null

    // 舱位
    var location: String = "" // null

    // 货邮混装时邮件重量
    var mailWeight: String = "" // null

    // 最大载重-必填
    var maxWeight: String = "" // null

    // 邮件票数
    var mcn: String = "" // null

    // 净重（装机重量）-必填
    var netWeight: String = "" // null

    // 操作时间
    var opDate: String = "" // null

    // 操作人
    var opId: String = "" // null

    // 件数-必填
    var pc: String = "" // null

    // 装载优先级
    var priority: String = "" // 0
    // 优先配送 0正常、1优先
    var locPriority: String = "" // 0

    // 备注
    var remark: String = "" // null

    // 机位
    var standId: String = "" // null

    // 存放区域
    var storageArea: String = "" // null

    // 普货和邮件票数总计
    var tcn: String = "" // null

    // 总重-必填
    var totalWeight: String = "" // null
    var transDate: String = "" // null
    var transId: String = "" // null

    // 运输状态 字典表code = TRANSSTATUS(0待运输、1开始运输、2完成运输)
    var transStatus: String = "" // null

    // 运输类型 字典表code = TRANSTYPE()
    var transType: String = "" // null
    var uld: String = "" // null
    var uldWeight: String = "" // null
    var useId: String = "" // 764681

    // 中文名
    var username: String = "" // null

    // 体积-必填
    var volume: String = "" // null

    // 特码
    var spCode: String = "" // null
    // 0普货、1特货
    var spCodeStatus: String = "" // null

//    加货标识
    var addCargoFlag: String = ""

    val addCargoFlagName: String
    get() {
        return when (addCargoFlag) {
            "1" -> "待加货"
            "2" -> "完成加货"
            else -> ""
        }
    }
//    完成加货时间
    var addCargoDate: String = ""

//    完成加货人
    var addCargoId: String = ""

    val checked = ObservableBoolean(false)

    override fun getCheckObservable() = checked

}