package com.kym.entity.admin;

import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import com.kym.entity.BaseEntity;
import lombok.Data;
import lombok.experimental.Accessors;

import java.util.List;

/**
 * <p>
 * 充电桩桩体设备
 * </p>
 *
 * @author skyline
 * @since 2023-09-01
 */
@Data
@TableName("t_equipment_info")
@Accessors(chain = true)
public class EquipmentInfo extends BaseEntity {

    public static int SERVICE_STATUS_离线 = 0;
    public static int SERVICE_STATUS_空闲 = 1;
    public static int SERVICE_STATUS_已连接 = 2;
    public static int SERVICE_STATUS_充电中 = 3;
    public static int SERVICE_STATUS_预约中 = 4;
    public static int SERVICE_STATUS_故障 = 255;

    /**
     * 公司id
     */
    private Long companyId;

    /**
     * 站点id
     */
    private String stationId;

    /**
     * 站点编号  eg:001,002
     */
    @TableField(exist = false)
    private String stationNo;

    /**
     * 站点名称
     */
    @TableField(exist = false)
    private String stationName;

    /**
     * 充电桩序列号
     */
    private String equipmentId;

    /**
     * 充电桩短编号
     */
    @TableField(exist = false)
    private String shortId;

    /**
     * 设备生产商组织机构代码
     */
    private String manufacturerId;

    /**
     * 设备生产商名称
     */
    private String manufacturerName;

    /**
     * 设备型号
     */
    private String equipmentModel;

    /**
     * 设备生产日期
     */
    private String productionDate;

    /**
     * 设备类型：1：直流设备 2：交流设备 3：交直流一体设备 4：无线设备 5：其他
     */
    private Integer equipmentType;

    /**
     * 车位编号
     */
    private String parkingNo;

    /**
     * 位置坐标
     * <p>
     * FastjsonTypeHandler
     * 支持 MVC JSON 解析
     * 不支持 MySQL JSON 解析
     * <p>
     * JacksonTypeHandler
     * 支持 MVC JSON 解析
     * 支持 MySQL JSON 解析
     */
    @TableField(typeHandler = JacksonTypeHandler.class)
    private JSONObject location;

    /**
     * 额定功率 千瓦
     */
    private Double power;

    /**
     * 网络状态：0-离线 1-在线
     */
    private Integer netStatus;

    /**
     * 服务状态：0-离网 1-空闲 2-已连接 3-充电中 4-预约中 255-故障
     */
    private Integer serviceStatus;


    /**
     * 充电接口列表
     */
    @TableField(exist = false)
    private List<ConnectorInfo> connectorInfos;


    public EquipmentInfo setStationId(String stationId) {
        this.stationId = stationId;
        return this;
    }


    public EquipmentInfo setShortId(String shortId) {
        this.shortId = shortId;
        if (shortId != null) {
            setStationNo(shortId.substring(0, 3));
        }
        return this;
    }

    public EquipmentInfo setPower(Double power) {
        this.power = power;
        return this;
    }

    public EquipmentInfo setStationName(String stationName) {
        this.stationName = stationName;
        return this;
    }
}
