package com.jsowell.common.core.domain.ykc;

import com.google.common.primitives.Bytes;
import com.jsowell.common.util.BytesUtil;
import lombok.Data;

/**
 * 云快充数据模板
 */
@Data
public class YKCDataProtocol {
	/**
	 * 起始标志 1字节
	 */
	private byte[] head;

	/**
	 * 数据长度 1字节
	 */
	private byte[] length;

	/**
	 * 序列号域 2字节
	 */
	private byte[] serialNumber;

	/**
	 * 加密标志 1 字节
	 */
	private byte[] encryptFlag;

	/**
	 * 帧类型标志 1 字节
	 */
	private byte[] frameType;

	/**
	 * 消息体 N字节
	 */
	private byte[] msgBody;

	/**
	 * 帧校验域 2字节
	 */
	private byte[] crcByte;

	public YKCDataProtocol(byte[] msg) {
		// 起始标志
		this.head = BytesUtil.copyBytes(msg, 0, 1);
		// 数据长度
		this.length = BytesUtil.copyBytes(msg, 1, 1);
		// 序列号域
		this.serialNumber = BytesUtil.copyBytes(msg, 2, 2);
		// 加密标志
		this.encryptFlag = BytesUtil.copyBytes(msg, 4, 1);
		// 帧类型标志
		this.frameType = BytesUtil.copyBytes(msg, 5, 1);
		// 消息体
		this.msgBody = BytesUtil.copyBytes(msg, 6, msg.length - 8);
		// 帧校验域
		this.crcByte = new byte[]{msg[msg.length - 2], msg[msg.length - 1]};
	}

	/**
	 * 转换为十六进制字符串
	 *
	 * @return 报文
	 */
	public String getHEXString() {
		byte[] bytes = Bytes.concat(this.head, this.length, this.serialNumber, this.encryptFlag, this.frameType, this.msgBody, this.crcByte);
		return BytesUtil.binary(bytes, 16);
	}
}
