#ifndef GERMANAIRLINESVA_FILE_RECORDINGENTRY_H
#define GERMANAIRLINESVA_FILE_RECORDINGENTRY_H

#include <cstdint>
#include <fstream>
#include <vector>

#include "geodata.hpp"
#include "helpers.hpp"

namespace germanairlinesva
{
namespace file
{
  namespace recording
  {
    /*
     * Path Segment (24)
     * UINT32 | UINT16   | UINT16      | POINT
     * -------+----------+-------------+------------
     * TIME   | ALTITUDE | GROUNDSPEED | COORDINATES
     */
    class RecordingEntry
    {
      private:
        std::uint32_t time;
        std::uint16_t altitude;
        std::uint16_t groundSpeed;
        struct geodata::point coordinates;

      public:
        inline RecordingEntry() = default;
        inline RecordingEntry(std::uint32_t time,
                              std::uint16_t altitude,
                              std::uint16_t groundSpeed,
                              struct geodata::point coordinates)
            : time(time), altitude(altitude), groundSpeed(groundSpeed),
              coordinates(coordinates)
        {
        }

        inline void toFile(std::ofstream &out) const
        {
          write<decltype(this->time)>(out, this->time);
          write<decltype(this->altitude)>(out, this->altitude);
          write<decltype(this->groundSpeed)>(out, this->groundSpeed);
          write<decltype(this->coordinates)>(out, this->coordinates);
        }

        friend inline bool operator==(const RecordingEntry &lhs,
                                      const RecordingEntry &rhs)
        {
          return lhs.altitude == rhs.altitude &&
                 lhs.groundSpeed == rhs.groundSpeed &&
                 lhs.coordinates.latitude == rhs.coordinates.latitude &&
                 lhs.coordinates.longitude == rhs.coordinates.longitude;
        }
        friend inline bool operator!=(const RecordingEntry &lhs,
                                      const RecordingEntry &rhs)
        {
          return !(lhs == rhs);
        }
    };
  } // namespace recording
} // namespace file
} // namespace germanairlinesva

#endif
