#pragma once

#include <Eigen/Core>
#include <Eigen/Geometry>

#define MATCH_PRECISION_INIT 0
#define MATCH_PRECISION_FULL 1
#define MATCH_PRECISION_HIGH 2
#define MATCH_PRECISION_FAST 3

struct GnssPoint {
    double B;
    double L;
    double H;
    // roll is defined right-hand anti-clockwise in XYZ: front-left-up
    // pitch is defined right-hand anti-clockwise in XYZ: front-left-up
    // yaw is defined right-hand anti-clockwise, 0 degree points to EAST,
    // and it is diffirent from azimuth
    Eigen::Vector3d rpy;
};

struct GuessPose {
    GnssPoint gnss_point;
    Eigen::Isometry3d map_point;
    float movement;
    float rotation;
    uint8_t precision_type;
    bool use_gnss;
};