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 XPressNet XNet Double Header and Multiple Unit Error replies.
010 *
011 * @author Paul Bender Copyright (C) 2025
012 */
013
014public class XNetDHandMUErrorMessageFormatter implements XPressNetMessageFormatter {
015
016    @Override
017    public boolean handlesMessage(Message m) {
018        return m instanceof XNetReply && ((XNetReply) m).getElement(0) == XNetConstants.LOCO_MU_DH_ERROR;
019    }
020
021    @Override
022    public String formatMessage(Message m) {
023        if (!handlesMessage(m)) {
024            throw new IllegalArgumentException("Message is not supported");
025        }
026        switch (m.getElement(1)) {
027            case 0x81:
028                return Bundle.getMessage("XNetReplyDHErrorNotOperated");
029            case 0x82:
030                return Bundle.getMessage("XNetReplyDHErrorInUse");
031            case 0x83:
032                return Bundle.getMessage("XNetReplyDHErrorAlreadyDH");
033            case 0x84:
034                return Bundle.getMessage("XNetReplyDHErrorNonZeroSpeed");
035            case 0x85:
036                return Bundle.getMessage("XNetReplyDHErrorLocoNotMU");
037            case 0x86:
038                return Bundle.getMessage("XNetReplyDHErrorLocoNotMUBase");
039            case 0x87:
040                return Bundle.getMessage("XNetReplyDHErrorCanNotDelete");
041            case 0x88:
042                return Bundle.getMessage("XNetReplyDHErrorStackFull");
043            default:
044                return Bundle.getMessage("XNetReplyDHErrorOther", (m.getElement(1) - 0x80));
045        }
046    }
047
048}