package com.qmai.zqtoolkit.config

import com.qmai.zqtoolkit.base.AclasScaleKit
import com.qmai.zqtoolkit.base.SunmiScaleKit
import com.qmai.zqtoolkit.base.ZqScaleKit
import com.qmai.zqtoolkit.base.scale.ScaleBaseKit

/**
 * tongzi
 * 2022/5/26
 */
enum class QmScaleBrand(
    val brand: String,
) {
    SUNMI("商米"), ZQEB("中崎"), ACLAS("顶尖");

    companion object {
        fun list(): List<QmScaleBrandValue> {
            return values().map { QmScaleBrandValue(it) }
        }
        fun find(kit: ScaleBaseKit?): QmScaleBrandValue? {
            return when (kit) {
                ZqScaleKit -> QmScaleBrandValue(ZQEB)
                AclasScaleKit -> QmScaleBrandValue(ACLAS)
                SunmiScaleKit -> QmScaleBrandValue(SUNMI)
                else -> null
            }
        }
    }
}

data class QmScaleBrandValue(val brand: String) {
    constructor(sort: QmScaleBrand) : this(sort.brand)
}

enum class QmScaleModel(
    val model: String,
    val brand: String
) {
    DEFAULT_ZQ("中崎通用", QmScaleBrand.ZQEB.brand),
    ACS15("ACS15", QmScaleBrand.ZQEB.brand),
    SMART("SMART-180", QmScaleBrand.ZQEB.brand),
    DEFAULT_ACLAS("顶尖通用", QmScaleBrand.ACLAS.brand),
    OX2X("OX2X", QmScaleBrand.ACLAS.brand),
    PX1("PX1", QmScaleBrand.ACLAS.brand),
    DEFAULT_SUNMI("商米通用", QmScaleBrand.SUNMI.brand),
    S2_CC("S2_CC", QmScaleBrand.SUNMI.brand);

    companion object {
        fun list(sort: QmScaleBrandValue): List<QmScaleModelValue> {
            return values().filter {
                it.brand == sort.brand
            }.map {
                QmScaleModelValue(it)
            }
        }

        fun find(kit: ScaleBaseKit?): QmScaleModelValue? {
            return when (kit) {
                ZqScaleKit -> QmScaleModelValue(DEFAULT_ZQ)
                AclasScaleKit -> QmScaleModelValue(DEFAULT_ACLAS)
                SunmiScaleKit -> QmScaleModelValue(DEFAULT_SUNMI)
                else -> null
            }
        }

    }
}

data class QmScaleModelValue(val brand: String, val model: String) {
    constructor(scale: QmScaleModel) : this(scale.brand, scale.model)
}

