/** \file
 *
 *  Contains the SendDirect class definition.
 *
 *  Copyright (c) 2021 MBARI
 *  MBARI Proprietary Information.  All Rights Reserved
 */

#ifndef SENDDIRECT_H_
#define SENDDIRECT_H_

#include "component/Behavior.h"
#include "logger/LogWriter.h"
#include "utils/FlexArray.h"

class DataReader;
class MissionItem;
class MissionNode;
class Module;
class SendDestination;

/**
 *  Behavior that is embedded in scripted code within a mission file.
 *
 *  \ingroup missionScript
 */

class SendDirect: public Behavior
{
public:
    /// Constructor
    SendDirect( const Str& prefix, const Module* module );

    static SendDirect* Instance( MissionNode* node, const Str& itemName, MissionItem* parent, const Module* module, Logger& logger );
    virtual ~SendDirect();
    virtual void initialize();
    virtual void run();
    virtual bool runIfUnsatisfied();
    virtual void uninitialize();

    void readConfig();

    /// Mission Component factory interface
    static Behavior* CreateBehavior( const Str& prefix, const Module* module );

protected:

    bool initialized_;

    // Slate input setting variables
    SettingReader *destTypeSettingReader_;
    SettingReader *destIdSettingReader_;
    SettingReader *destNameSettingReader_;
    SettingReader *valueSettingReader_;
    SettingReader *unitSettingReader_;

    Str destSetting_;
    const Unit* unitSetting_;
    SendDestination* destination_;

private:
    // Note that the copy constructor below is private and not given a body.
    // Any attempt to call it will return a compiler error.
    SendDirect( const SendDirect& old ); // disallow copy constructor
};

#endif /* SENDDIRECT_H_ */
