001package jmri.jmrix.roco.z21.messageformatters;
002
003import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
004import jmri.jmrix.Message;
005import jmri.jmrix.roco.z21.Z21MessageFormatter;
006import jmri.jmrix.roco.z21.Z21Reply;
007
008/**
009 * Z21 LocoNet Tunnel Reply Formatter.
010 *
011 * @author Paul Bender Copyright (C) 2025
012 */
013public class Z21LocoNetTunnelReplyFormatter implements Z21MessageFormatter {
014
015    @Override
016    public boolean handlesMessage(Message m) {
017        return m instanceof Z21Reply &&
018                (((Z21Reply) m).getOpCode() == 0x00A0 ||
019                ((Z21Reply) m).getOpCode() == 0x00A1 ||
020                ((Z21Reply) m).getOpCode() == 0x00A2 );
021    }
022
023    @SuppressFBWarnings(value = "BC_UNCONFIRMED_CAST", justification = "cast is checked in handlesMessage")
024    @Override
025    public String formatMessage(Message m) {
026        if(!handlesMessage(m)){
027            throw new IllegalArgumentException("Message is not a Z21 LocoNet Tunnel Reply");
028        }
029        switch (((Z21Reply) m).getOpCode()) {
030            case 0x00A0:
031                return Bundle.getMessage("Z21LocoNetRxReply", ((Z21Reply) m).getLocoNetMessage().toMonitorString());
032            case 0x00A1:
033                return Bundle.getMessage("Z21LocoNetTxReply", ((Z21Reply) m).getLocoNetMessage().toMonitorString());
034            default:
035                return Bundle.getMessage("Z21LocoNetLanReply", ((Z21Reply) m).getLocoNetMessage().toMonitorString());
036        }
037    }
038
039}