001package jmri.jmrix.lenz.messageformatters;
002
003import jmri.jmrix.Message;
004import jmri.jmrix.lenz.XNetConstants;
005import jmri.jmrix.lenz.XNetReply;
006import jmri.jmrix.lenz.XPressNetMessageFormatter;
007
008/**
009 * Formatter for XNet CS Info Response messages.
010 *
011 * @author Paul Bender Copyright (C) 2025
012 */
013public class XNetCommandStationInfoResponseFormatter implements XPressNetMessageFormatter {
014
015    @Override
016    public boolean handlesMessage(Message m) {
017        return m instanceof XNetReply && ((XNetReply) m).getElement(0) == XNetConstants.CS_INFO;
018    }
019
020    @Override
021    public String formatMessage(Message m) {
022        if(!handlesMessage(m)){
023            throw new IllegalArgumentException("Message is not a XNetReply or is not a CS Info message");
024        }
025        //XNetReply r = (XNetReply) m;
026        switch (m.getElement(1)) {
027            case XNetConstants.BC_NORMAL_OPERATIONS:
028                return Bundle.getMessage("XNetReplyBCNormalOpsResumed");
029            case XNetConstants.BC_EVERYTHING_OFF:
030                return Bundle.getMessage("XNetReplyBCEverythingOff");
031            case XNetConstants.BC_SERVICE_MODE_ENTRY:
032                return Bundle.getMessage("XNetReplyBCServiceEntry");
033            case XNetConstants.PROG_SHORT_CIRCUIT:
034                return Bundle.getMessage("XNetReplyServiceModeShort");
035            case XNetConstants.PROG_BYTE_NOT_FOUND:
036                return Bundle.getMessage("XNetReplyServiceModeDataByteNotFound");
037            case XNetConstants.PROG_CS_BUSY:
038                return Bundle.getMessage("XNetReplyServiceModeCSBusy");
039            case XNetConstants.PROG_CS_READY:
040                return Bundle.getMessage("XNetReplyServiceModeCSReady");
041            case XNetConstants.CS_BUSY:
042                return Bundle.getMessage("XNetReplyCSBusy");
043            case XNetConstants.CS_NOT_SUPPORTED:
044                return Bundle.getMessage("XNetReplyCSNotSupported");
045            case XNetConstants.CS_TRANSFER_ERROR:
046                return Bundle.getMessage("XNetReplyCSTransferError");
047            /* The remaining cases are for a Double Header or MU Error */
048            case XNetConstants.CS_DH_ERROR_NON_OP:
049                return Bundle.getMessage("XNetReplyV1DHErrorNotOperated");
050            case XNetConstants.CS_DH_ERROR_IN_USE:
051                return Bundle.getMessage("XNetReplyV1DHErrorInUse");
052            case XNetConstants.CS_DH_ERROR_ALREADY_DH:
053                return Bundle.getMessage("XNetReplyV1DHErrorAlreadyDH");
054            case XNetConstants.CS_DH_ERROR_NONZERO_SPD:
055                return Bundle.getMessage("XNetReplyV1DHErrorNonZeroSpeed");
056            default:
057                return m.toString();
058        }
059    }
060
061}