package com.jeequan.jeepay.core.entity;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
import com.jeequan.jeepay.core.model.BaseModel;
import lombok.Data;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 商户门店设备配置表
 * </p>
 *
 * @author [mybatis plus generator]
 * @since 2021-12-28
 */
@Data
@Accessors(chain = true)
public class MchStoreDevice extends BaseModel implements Serializable {

    private static final long serialVersionUID=1L;

    public static final byte DEVICE_TYPE_SPEAKER = 1; // 云喇叭
    public static final byte DEVICE_TYPE_PRINTER = 2; // 打印机
    public static final byte DEVICE_TYPE_POS = 3; // 扫码POS
    public static final byte DEVICE_TYPE_AUTO_POS = 4; // 智能POS
    public static final byte DEVICE_TYPE_PLUGIN = 5; // 收银插件
    public static final byte DEVICE_TYPE_FACE_APP = 6; // 刷脸设备
    public static final byte DEVICE_TYPE_RUYI = 7; // 如意Lite

    // 绑定类型
    public static final byte DEVICE_BIND_TYPE_STORE = 0; // 门店
    public static final byte DEVICE_BIND_TYPE_QRC = 1; // 码牌

    // 设备表类型 和 订单表类型转换关系
    public static Object covertDeviceType(Object deviceType) {
        if (deviceType instanceof Byte) {
            switch ((Byte) deviceType) {
                case DEVICE_TYPE_POS: return PayOrder.DEVICE_TYPE_SCAN_POS;
                case DEVICE_TYPE_AUTO_POS: return PayOrder.DEVICE_TYPE_AUTO_POS;
                case DEVICE_TYPE_PLUGIN: return PayOrder.DEVICE_TYPE_CASH_PLUGIN;
                case DEVICE_TYPE_FACE_APP: return PayOrder.DEVICE_TYPE_FACE_APP;
                case DEVICE_TYPE_RUYI: return PayOrder.DEVICE_TYPE_ALIPAY_RUYI_LITE;
            }
        }else {
            switch ((String) deviceType) {
                case PayOrder.DEVICE_TYPE_SCAN_POS: return DEVICE_TYPE_POS;
                case PayOrder.DEVICE_TYPE_AUTO_POS: return DEVICE_TYPE_AUTO_POS;
                case PayOrder.DEVICE_TYPE_CASH_PLUGIN: return DEVICE_TYPE_PLUGIN;
                case PayOrder.DEVICE_TYPE_FACE_APP: return DEVICE_TYPE_FACE_APP;
                case PayOrder.DEVICE_TYPE_ALIPAY_RUYI_LITE: return DEVICE_TYPE_RUYI;
            }
        }
        return null;
    }

    // 支付宝如意设备型号
    public static final Map<String, String> ALIPAY_IOT_DEVICE_MAP = new HashMap<>();
    static {
        ALIPAY_IOT_DEVICE_MAP.put("alipayRuYi", "201901111100635561");
        ALIPAY_IOT_DEVICE_MAP.put("alipayRuYiPro", "202109071403204809");
        ALIPAY_IOT_DEVICE_MAP.put("alipayRuYi2", "202008061702346558");
    }

    /**
     * 设备ID
     */
    private Long deviceId;

    /**
     * 设备名称
     */
    private String deviceName;

    /**
     * 批次号
     */
    private String batchId;

    /**
     * 关联厂商配置ID
     */
    private Long configId;

    /**
     * 设备类型： 1-云喇叭, 2-云打印
     */
    private Byte deviceType;

    /**
     * 设备厂商：参考配置表
     */
    private String provider;

    /**
     * 设备号
     */
    private String deviceNo;

    /**
     * 设备参数，json字符串
     */
    private String deviceParams;

    /**
     * 业务配置参数，json字符串
     */
    private String bizConfigParams;

    /**
     * 绑定码牌ID（批量添加云喇叭设备时绑定的码牌ID，与云喇叭设备一对一关系）
     */
    private Long bindQrcId;

    /**
     * 门店ID
     */
    private String storeId;

    /**
     * 商户号
     */
    private String mchNo;

    /**
     * 应用appId
     */
    private String appId;

    /**
     * 服务商号
     */
    private String agentNo;

    /**
     * 状态： 0-停用，1-启用
     */
    private Byte state;

    /**
     * 商户绑定状态： 0-未绑定，1-已绑定
     */
    private Byte bindState;

    /**
     * 绑定类型： 0-门店，1-码牌
     */
    private Byte bindType;

    /**
     * 绑定时间
     */
    private Date bindTime;

    /**
     * 解绑时间
     */
    private Date unbindTime;

    /**
     * 蚂蚁店铺Iot设备绑定状态： 0-未绑定，1-已绑定
     */
    private Byte alipayBindState;

    /**
     * 蚂蚁店铺ID
     */
    private String alipayShopId;

    /**
     * 创建时间
     */
    private Date createdAt;

    /**
     * 更新时间
     */
    private Date updatedAt;


    @TableField(typeHandler = FastjsonTypeHandler.class)
    private JSONObject marqueeInfo;

    /**
     * 轮播图
     */
    @TableField(typeHandler = FastjsonTypeHandler.class)
    private List<JSONObject> carouselPicInfo;

    /**
     * 付款区域背景图
     */
    @TableField(typeHandler = FastjsonTypeHandler.class)
    private JSONObject payPicInfo;
}
