/** \file
 *
 *  Contains the WorkSite class declaration.
 *
 *  WorkSite.h should only be included by WorkSite.cpp and children.
 *
 *  Copyright (c) 2013 MBARI
 *  MBARI Proprietary Information.  All Rights Reserved
*/
#ifndef WORKSITE_H_
#define WORKSITE_H_

// include parent class
#include "component/SyncComponent.h" // should include component/Component.h in turn
// forward declare classes for which this class includes a pointer
class ConfigReader;
class UniversalDataReader;

/**
 * WorkSite class.
 *
 * WorkSite.h should only be included by WorkSite.cpp and children.
 *
 * \ingroup modules_navigation
 */
class WorkSite : public SyncNavigationComponent
{
public:

    WorkSite( const Module* module );

    virtual ~WorkSite();

    void initialize( void );

    void run( void );

    void writeWorkSite( double& lat, double& lon, Timestamp& time );

    bool readWorkSite( double& latitude, double& longitude, Timestamp& time );

    bool parseLine( char* buffer, Str& name, DataValue* &dataVal ); // yep, that's a reference to a pointer

    void publishToSlate( const double& latitude, const double& longitude, const Timestamp& time );

protected:

    static const char WORKSITE_CFG[];

    static const float WORKSITE_ACCURACY;

    ConfigReader* writeIntervalConfigReader_;
    ConfigReader* verbosityLevelConfigReader_;

    UniversalDataReader* latitudeReader_;
    UniversalDataReader* longitudeReader_;

    UniversalDataWriter* latitudeFixWriter_;
    UniversalDataWriter* longitudeFixWriter_;
    UniversalDataWriter* timeFixWriter_;

    DataReader* sBITRunningReader_;

    Timespan writeIntervalCfg_;

    Timestamp startTime_;

    bool readPositionOnce_;

    int verbosity_;
};

#endif /* WORKSITE_H_ */
