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 * Format replies for XPressNet replies from the Computer Interface.
010 *
011 * @author Paul Bender Copyright (C) 2025
012 */
013public class XNetLIReplyFormatter implements XPressNetMessageFormatter {
014
015    @Override
016    public boolean handlesMessage(Message m) {
017        return m instanceof XNetReply && m.getElement(0) == XNetConstants.LI_MESSAGE_RESPONSE_HEADER;
018    }
019
020    @Override
021    public String formatMessage(Message m) {
022        if(!handlesMessage(m)) {
023            throw new IllegalArgumentException("Message is not supported");
024        }
025        switch(m.getElement(1)) {
026            case XNetConstants.LI_MESSAGE_RESPONSE_PC_DATA_ERROR:
027                return Bundle.getMessage("XNetReplyErrorPCtoLI");
028            case XNetConstants.LI_MESSAGE_RESPONSE_CS_DATA_ERROR:
029                return Bundle.getMessage("XNetReplyErrorLItoCS");
030            case XNetConstants.LI_MESSAGE_RESPONSE_UNKNOWN_DATA_ERROR:
031                return Bundle.getMessage("XNetReplyErrorUnknown");
032            case XNetConstants.LI_MESSAGE_RESPONSE_SEND_SUCCESS:
033                return Bundle.getMessage("XNetReplyOkMessage");
034            case XNetConstants.LI_MESSAGE_RESPONSE_TIMESLOT_ERROR:
035                return Bundle.getMessage("XNetReplyErrorNoTimeSlot");
036            case XNetConstants.LI_MESSAGE_RESPONSE_BUFFER_OVERFLOW:
037                return Bundle.getMessage("XNetReplyErrorBufferOverflow");
038            case XNetConstants.LIUSB_TIMESLOT_RESTORED:
039                return Bundle.getMessage("XNetReplyTimeSlotRestored");
040            case XNetConstants.LIUSB_REQUEST_SENT_WHILE_NO_TIMESLOT:
041                return Bundle.getMessage("XNetReplyRequestSentWhileNoTimeslot");
042            case XNetConstants.LIUSB_BAD_DATA_IN_REQUEST:
043                return Bundle.getMessage("XNetReplyBadDataInRequest");
044            case XNetConstants.LIUSB_RETRANSMIT_REQUEST:
045                return Bundle.getMessage("XNetReplyRetransmitRequest");
046            default:
047                return m.toString();
048        }
049    }
050
051}