package com.zsc.edu.gateway.modules.iot.device.vo;

import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.zsc.edu.gateway.framework.json.JsonbTypeHandler;
import com.zsc.edu.gateway.modules.iot.device.entity.Device;
import com.zsc.edu.gateway.modules.iot.product.entity.Product;
import com.zsc.edu.gateway.modules.iot.tsl.entity.Param;
import lombok.Data;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * @author zhuang
 */
@JsonInclude
@Data
public class DeviceVo {
    /**
     * 设备id
     */
    private Long id;
    /**
     * 设备名称
     */
    private String name;

    /**
     * 设备是否在线，默认在线
     */
    private Boolean online = false;

    /**
     * 设备状态
     */
    private Device.Status state = Device.Status.UNACTIVATED;

    /**
     * 硬件版本
     */
    private String hardwareVersion;

    /**
     * 固件版本
     */
    private String firmwareVersion;


    /**
     * 出厂ID
     */
    private String factoryId;


    /**
     * 客户ID
     */
    private String clientId;


    /**
     * 扩展配置
     */
    private List<Map<String, Object>> extendParams;

    /**
     * 设备属性
     */
    private List<Map<String, Object>> properties;

    /**
     * 备注说明
     */
    public String deviceRemark;

    /**
     * 创建时间
     */
    public LocalDateTime deviceCreateTime;

    /**
     * 创建者
     */
    public String deviceCreateBy;

    /**
     * 更新时间
     */
    public LocalDateTime deviceUpdateTime;

    /**
     * 更新者
     */
    public String deviceUpdateBy;

    /**
     * 所属产品ID
     */
    public Long productId;


    /**
     * 产品名称
     */
    private String productName;
    /**
     * 部门ID
     */
    private Long deptId;
    /**
     * 产品类型
     */
    private String productType;

    /**
     * 产品型号
     */
    private String model;

    /**
     * 接入方式
     */
    private Product.LinkType link;

    /**
     * 备注说明
     */
    public String remark;

    /**
     * 创建时间
     */
    public LocalDateTime createTime;

    /**
     * 创建者
     */
    public String createBy;

    /**
     * 更新时间
     */
    public LocalDateTime updateTime;

    /**
     * 更新者
     */
    public String updateBy;

    /**
     * 设备包含的扩展属性，产品不同，设备所包含的属性也略有不同
     */
    private Set<Param> params;
}
