package com.lingniu.ingest.protocol.gb32960.model;

/**
 * 应答标志。GB/T 32960.3-2025 表 4 "应答标志定义"。
 *
 * <p>命令的主动发起方应答标志为 {@code 0xFE}（{@link #COMMAND}），表示此包为命令包；
 * 当应答标志不是 {@code 0xFE} 时，此包表示为应答包。服务端发送应答时，应变更应答标志，
 * 保留报文时间，删除其余报文内容，并重新计算校验位。
 */
public enum ResponseFlag {
    /** 0x01：成功 —— 接收到的信息正确。 */
    SUCCESS(0x01),
    /** 0x02：其他错误 —— 其他收到的信息存在格式及内容错误。 */
    OTHER_ERROR(0x02),
    /** 0x03：VIN 重复。 */
    VIN_DUPLICATED(0x03),
    /** 0x04：VIN 不存在（2025 版新增）。 */
    VIN_NOT_EXIST(0x04),
    /** 0x05：验签错误（2025 版新增）。 */
    SIGNATURE_ERROR(0x05),
    /** 0x06：数据结构错误（2025 版新增）。 */
    STRUCTURE_ERROR(0x06),
    /** 0x07：解密错误（2025 版新增）。 */
    DECRYPT_ERROR(0x07),
    /** 0xFE：命令 —— 表示数据包为命令包，而非应答包。 */
    COMMAND(0xFE);

    private final int code;

    ResponseFlag(int code) {
        this.code = code;
    }

    public int code() {
        return code;
    }

    public boolean isCommand() {
        return this == COMMAND;
    }

    public static ResponseFlag of(int code) {
        for (ResponseFlag r : values()) if (r.code == code) return r;
        return OTHER_ERROR;
    }
}
