package cn.estsh.i3plus.ext.mes.pcn.apiservice.util.rfid;

import lombok.Data;

import java.util.ArrayList;
import java.util.List;

@Data
public class ComandListTagId extends IBaseCommandParam{
    /**
     * 内存区域
     * 0	密码区
     * 1	EPC号
     * 2	TID标签ID号
     * 3	用户区User  默认
     */
    private Byte mem;

    /**
     * 起始的地址
     */
    private Byte addr;

    /**
     * 掩码长度
     */
    private Byte len;

    /**
     * 掩码
     * If LEN％8=0，then m=LEN/8。If LEN％8!=0，then m=(LEN/8)+1。
     */
    private Byte mask;

    /**
     * 获取默认实例
     * @return
     */
    public static ComandListTagId getInstance(byte mem) {
        ComandListTagId comandListTagId = new ComandListTagId();
        comandListTagId.setAddr(ReaderConstWords.BYTE_ZERO);
        comandListTagId.setLen(ReaderConstWords.BYTE_ZERO);
        comandListTagId.setMask(ReaderConstWords.BYTE_ZERO);
        comandListTagId.setMem(mem);
        return comandListTagId;
    }

    @Override
    public List<Byte> toByteList(){
        List<Byte> byteList = new ArrayList<Byte>();
        byteList.add(this.mem);
        byteList.add(this.addr);
        byteList.add(this.len);
        byteList.add(this.mask);
        return byteList;
    };

    @Override
    public Byte[] toByteArray(){
        List<Byte> byteList = new ArrayList<Byte>();
        byteList.add(this.mem);
        byteList.add(this.addr);
        byteList.add(this.len);
        byteList.add(this.mask);
        return this.toByteList().toArray(new Byte[]{});
    };


    /**
     * 获取包的有效长度
     *  固定长度
     * @return
     */
    @Override
    public int getLength(){
        return ComandListTagId.class.getDeclaredFields().length;
    }
}
