001package jmri.jmrix.lenz.messageformatters;
002
003import jmri.jmrix.Message;
004import jmri.jmrix.lenz.LenzCommandStation;
005import jmri.jmrix.lenz.XNetConstants;
006import jmri.jmrix.lenz.XNetMessage;
007import jmri.jmrix.lenz.XPressNetMessageFormatter;
008
009/**
010 * Formatter for XNet Search Loco in MU Request Messages
011 *
012 * @author Paul Bender Copyright (C) 2024
013 */
014public class XNetSearchMURequestMessageFormatter implements XPressNetMessageFormatter {
015    @Override
016    public boolean handlesMessage(Message m) {
017        return m instanceof XNetMessage &&
018                m.getElement(0) == XNetConstants.LOCO_IN_MULTI_UNIT_SEARCH_REQ &&
019                (m.getElement(1) == XNetConstants.LOCO_IN_MULTI_UNIT_REQ_FORWARD ||
020                m.getElement(1) == XNetConstants.LOCO_IN_MULTI_UNIT_REQ_BACKWARD);
021
022    }
023
024    @Override
025    public String formatMessage(Message m) {
026        if(!handlesMessage(m))
027            throw new IllegalArgumentException("Message is not supported");
028        String key = "XNetMessageSearchCSStackForwardNextMULoco";
029        if(m.getElement(1) == XNetConstants.LOCO_IN_MULTI_UNIT_REQ_BACKWARD) {
030            key = "XNetMessageSearchCSStackBackwardNextMULoco";
031        }
032        return Bundle.getMessage(key,
033                           m.getElement(2),
034                           LenzCommandStation.calcLocoAddress(m.getElement(3), m.getElement(4)));
035    }
036}