/** \file
 *
 *  Specifies the interface details for the TrackAcousticContact component in the
 *  EstimationModule.
 *
 *  TrackAcousticContact.h should only be included by TrackAcousticContact.cpp
 *  Other classes should include TrackAcousticContactIF.h
 *
 *  Copyright (c) 2013 MBARI
 *  MBARI Proprietary Information.  All Rights Reserved
 */

#ifndef TRACKACOUSTICCONTACTIF_H_
#define TRACKACOUSTICCONTACTIF_H_

#include "data/ElementURI.h"

/**
 *  Specifies the interface details for the TrackAcousticContact component in the
 *  EstimationModule.
 *
 *  TrackAcousticContact.h should only be included by TrackAcousticContact.cpp
 *  Other classes should include TrackAcousticContactIF.h
 *
 *  \ingroup modules_estimation
 */
namespace TrackAcousticContactIF
{
// Static const for component name
// (Can be used by other components)
static const Str NAME( "TrackAcousticContact" );

#include "component/HasEnableBroadcastIF.h"

// Inputs from the mission .xml file
static const SettingURI CONTACT_LABEL_SETTING( "contactLabelSetting", "Label of the contact to track. Currently, this is an integer acoustic address for the remote Benthos Acoustic Modem or DAT. In the future, it may be a more general label (e.g., Benthos-0, LRAUV-Tethys, ChlorophyllMax).", Units::ENUM );
static const SettingURI CONTACT_DEPTH_SETTING( "contactDepthSetting", "Depth of tracked contact (optioanl setting). If the depth of the contact is preknown and fixed (e.g., when tracking a surface vessel), users can pass this arg to improve the 2D projected position estimates in the world-frame-of-reference.", Units::METER );
static const SettingURI NUMBER_OF_FIXES_LOWPASS_SETTING( "numFixesLowPassSetting", "How many fixes to average (for low-pass filtering)", Units::COUNT );
static const SettingURI LOWPASS_WINDOW_OVERLAP_SETTING( "lowPassOverlapSetting", "Set to true for sliding low-pass filtering with overlap of 1, or false to eliminate overlap.", Units::BOOL );
static const SettingURI NUMBER_OF_SAMPLES_SETTING( "numberOfSamplesSetting", "How many samples to average before reporting a tracking fix. (Currently not implemented.)", Units::COUNT );
static const SettingURI NUMBER_OF_STARTING_FIXES_TOIGNORE_SETTING( "numStartingFixesToIgnoreSetting", "How many fixes to ignore at the start of mission (as the vehicle just leaves surface, contact's location estimate especailly bearing can be erroneous)", Units::COUNT );
static const SettingURI UPDATE_PERIOD_SETTING( "updatePeriodSetting", "How often to observe the target, in seconds. (Currently not implemented. Will initially be how long to wait in between queries to the remote modem.)", Units::SECOND );



static const DataURI CONTACT_LABEL( NAME, "contact_label", Units::ENUM );
static const DataURI CONTACT_LATITUDE( NAME, "contact_latitude", Units::RADIAN, DOUBLE8 ); // UniversalURI for vehicle latitude is in degrees
static const DataURI CONTACT_LONGITUDE( NAME, "contact_longitude", Units::RADIAN, DOUBLE8 ); // UniversalURI for vehicle longitude is in degrees
static const DataURI CONTACT_DEPTH( NAME, "contact_depth", Units::METER );
static const DataURI RANGE_TO_CONTACT( NAME, "range_to_contact", Units::METER );
static const DataURI AZIMUTH_TO_CONTACT_VF( NAME, "azimuth_to_contact_vehicle_frame", Units::RADIAN );
static const DataURI ELEVATION_TO_CONTACT_VF( NAME, "elevation_to_contact_vehicle_frame", Units::RADIAN );
static const DataURI HEADING_TO_CONTACT( NAME, "heading_to_contact", Units::RADIAN );
static const DataURI EASTINGS_TO_CONTACT( NAME, "eastings_to_contact", Units::METER );
static const DataURI NORTHINGS_TO_CONTACT( NAME, "northings_to_contact", Units::METER );

static const BlobURI DIRECTION_VF( NAME, "direction_vehicle_frame", Units::NONE, BLOB_FLOAT64LE, 3 );
static const BlobURI DIRECTION_NF( NAME, "direction_navigation_frame", Units::NONE, BLOB_FLOAT64LE, 3 );
static const BlobURI RELATIVE_POSITION_VF( NAME, "relativePosition_vehicleFrame", Units::METER, BLOB_FLOAT64LE, 3 );
static const BlobURI RELATIVE_POSITION_NF( NAME, "relativePosition_navigationFrame", Units::METER, BLOB_FLOAT64LE, 3 );

static const DataURI CONTACT_HORIZONTAL_RANGE_LOWPASS( NAME, "horizontal_range_to_contact_lowpass", Units::METER );
static const DataURI CONTACT_HEADING_LOWPASS( NAME, "heading_to_contact_lowpass", Units::RADIAN );
static const DataURI CONTACT_LATITUDE_LOWPASS( NAME, "contact_latitude_lowpass", Units::RADIAN, DOUBLE8 ); // UniversalURI for vehicle latitude is in degrees
static const DataURI CONTACT_LONGITUDE_LOWPASS( NAME, "contact_longitude_lowpass", Units::RADIAN, DOUBLE8 ); // UniversalURI for vehicle longitude is in degrees
static const DataURI CONTACT_DEPTH_LOWPASS( NAME, "contact_depth_lowpass", Units::METER );

}

#endif /*TRACKACOUSTICCONTACTIF_H_*/
