/** \file
 *
 *  Contains the MagneticVariation class declaration.
 *
 *  Copyright (c) 2007,2008,2009 MBARI
 *  MBARI Proprietary Information.  All Rights Reserved
 */

#ifndef MAGNETICVARIATION_H_
#define MAGNETICVARIATION_H_

#include "data/Location.h"
#include "utils/AuvMath.h"
#include "utils/Timestamp.h"

#include "../../Lib/libmagdev/include/libmagdev.h"

/**
 *  Wraps libmagdev
 *
 *  \ingroup utils
 */
class MagneticVariation
{
public:
    inline static float Degree( const Timestamp& timestamp, const float& latitudeDeg, const float& longitudeDeg, const float altitudeMeter = 0.0f )
    {
        return magdev( timestamp.asTimeT(), longitudeDeg, latitudeDeg, altitudeMeter / 1000.0f );
    }
    inline static float Radian( const Timestamp& timestamp, const float& latitudeRad, const float& longitudeRad, const float altitudeMeter = 0.0f )
    {
        return D2R( magdev( timestamp.asTimeT(), R2D( longitudeRad ), R2D( latitudeRad ), altitudeMeter / 1000.0f ) );
    }
};

#endif /*MAGNETICVARIATION_H_*/
