package com.ruoyi.iot.domain;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.ruoyi.iot.service.impl.DeviceOnlineStatus;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Getter;

import java.util.Date;
import java.util.List;

/**
 * @author wjh
 * 2024/3/20
 */
@Data
public class IotDeviceDetail {
    // 设备ID，类型根据实际情况可能是Integer或String
    @JsonProperty("did")
    private String did;

    // 产品ID
    @JsonProperty("pid")
    private String pid;

    // 接入协议，具体类型根据接入协议说明表确定
    @JsonProperty("access_pt")
    private Integer accessPt;

    // 数据协议，具体类型根据数据协议说明表确定
    @JsonProperty("data_pt")
    private Integer dataPt;

    // 设备名称
    @JsonProperty("name")
    private String name;

    // 设备描述
    @JsonProperty("desc")
    private String desc;

    // 设备鉴权信息，如果是一个复杂的对象，需要另外定义类
    @JsonProperty("auth_info")
    private Object authInfo;

    // 设备状态
    @JsonProperty("status")
    private Integer status;

    // 设备创建时间
    @JsonProperty("create_time")
    private Date createTime;

    // 设备激活时间
    @JsonProperty("activate_time")
    private Date activateTime;

    // 设备最后一次在线时间
    @JsonProperty("last_time")
    private Date lastTime;

    // 设备接入鉴权key
    @JsonProperty("sec_key")
    private String secKey;

    // LwM2M设备IMEI
    @JsonProperty("imei")
    private String imei;

    // LwM2M设备IMSI
    @JsonProperty("imsi")
    private String imsi;

    // LwM2M设备PSK
    @JsonProperty("psk")
    private String psk;

    // LwM2M设备auth_code
    @JsonProperty("auth_code")
    private String authCode;

    // 产品智能化方式
    @JsonProperty("intelligent_way")
    private int intelligentWay;

    // 设备分组ID
    @JsonProperty("group_id")
    private String groupId;

    // 设备启用状态
    @JsonProperty("enable_status")
    private Boolean enableStatus;

    // 设备标签列表
    @JsonProperty("tags")
    private List<String> tags;

    // 经度
    @JsonProperty("lon")
    private String lon;

    // 纬度
    @JsonProperty("lat")
    private String lat;

    // 芯片相关信息，如果是一个复杂的对象，需要另外定义类
    @JsonProperty("chip")
    private Object chip;

    // 设备资源自动订阅是否启用
    @JsonProperty("obsv")
    private Boolean obsv;

    // 设备资源自动订阅状态
    @JsonProperty("obsv_st")
    private Boolean obsvSt;

    // 设备私密性
    @JsonProperty("private")
    private Boolean privateFlag;

    // 设备imsi历史变更记录
    @JsonProperty("imsi_old")
    private List<String> imsiOld;

    // 设备imsi最近一次修改时间
    @JsonProperty("imsi_mt")
    private Date imsiMt;

    @Getter
    @AllArgsConstructor
    public enum Status {
        OFFLINE(0), // 离线
        ONLINE(1),  // 在线
        NO_ACTIVE(2);   // 未激活

        private final Integer status;

        // 转换为设备在线状态
        public static String toDeviceOnlineStatus(Integer iotStatus) {
            return ONLINE.getStatus().equals(iotStatus) ? DeviceOnlineStatus.ONLINE.getStatus(): DeviceOnlineStatus.OFFLINE.getStatus();
        }
    }
}
