#ifndef _ACOUSTICMSGHANDLER_H
#define _ACOUSTICMSGHANDLER_H

#include "CharData.h"
#include "ShortData.h"
#include "FloatData.h"
#include "StringMsgHandler.h"
#include "NavigationIF.h"
#include "LayeredControlIF.h"
#include "MetraByteIF.h"
#include "CTDIF.h"
#include "NavTelemetry.h"
#include "StatusTelemetry.h"
#include "CtdTelemetry.h"
#include "AcousticCommand.h"
#include "AcousticModemLog.h"
#include "AcousticMessage.h"

class AcousticMsgHandler : public StringMsgHandler {

public:

  AcousticMsgHandler(int maxMessageLength);
  virtual ~AcousticMsgHandler();

  virtual void process(StringMessage *input, StringMessages *output);

protected:

  LayeredControlIF *_layeredControl;
  NavigationIF *_navigation;
  MetraByteIF *_battery;
  CTDIF *_ctd;
  CharData _charData;
  NavTelemetry _navPacket;
  StatusTelemetry _statusPacket;
  CtdTelemetry _ctdPacket;
  AcousticCommand _commandPacket;

  // Data log
  AcousticModemLog _log;
  
  // Type of command for next autonomous response (cycles between types)
  AcousticMessage::Type _autoCmd;
};

#endif
