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

/**
 * 国际出港收运检查数据Bean
 * 对应后端 GjcMaWb 对象
 */
class GjcInspectionBean : ICheck {
    var maWbId: Long = 0                    // 主键ID GJC_MAWB.MAWBID
    var wbNo: String = ""                   // 11位运单号
    var no: String = ""                     // 运单号（含前缀）
    var prefix: String = ""                 // 运单前缀

    var agentCode: String = ""              // 代理人
    var agentName: String = ""              // 代理人名称
    var spCode: String = ""                 // 特码
    var pc: Long = 0                        // 预配件数
    var weight: Double = 0.0                // 预配重量
    var volume: Double = 0.0                // 预配体积

    var flight: String = ""                 // 航班(格式: 航班日期/航班号)
    var fdate: String = ""                  // 航班日期
    var fno: String = ""                    // 航班号
    var range: String = ""                  // 航程
    var dep: String = ""                    // 始发站
    var dest: String = ""                   // 最终目的站
    var scheduledTackOff: String = ""       // 计划起飞时间
    var scheduledArrival: String = ""       // 预计到达时间

    var businessType: String = ""           // 业务类型
    var businessName: String = ""           // 业务类型名称（中）
    var awbType: String = ""                // 运单类型
    var awbName: String = ""                // 运单类型名称（中）

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

    var goods: String = ""                  // 品名（英）
    var goodsCn: String = ""                // 品名（中）
    var origin: String = ""                 // 货源地
    var consignee: String = ""              // 收货人
    var remark: String = ""                 // 备注
    var carNumber: String = ""              // 车牌号
    var attachList: List<ComAttach>? = null // 附件列表

    // 多选状态绑定
    val checked = ObservableBoolean(false)

    override fun getCheckObservable(): ObservableBoolean {
        return checked
    }

    /**
     * 获取审核状态名称
     */
    fun getReviewStatusName(): String {
        return when (reviewStatus) {
            "1" -> "未审核"
            "2" -> "已通过"
            "3" -> "退回"
            else -> "未知"
        }
    }

    /**
     * 获取审核状态颜色
     */
    fun getReviewStatusColor(): String {
        return when (reviewStatus) {
            "1" -> "#9E9E9E"  // 灰色-未审核
            "2" -> "#4CAF50"  // 绿色-已通过
            "3" -> "#F44336"  // 红色-退回
            else -> "#9E9E9E" // 灰色-未知
        }
    }

    /**
     * 预计起飞时间 - 仅时分格式 (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
        }
    }
}
