#pragma once

#include <simgear/compiler.h>

#include <iostream>
#include <string>
#include <queue>

#include <simgear/misc/stdint.hxx>
#include <simgear/io/iochannel.hxx>
#include <simgear/serial/serial.hxx>


// Manage UGear Command Channel
class UGCommand {

private:

    int cmd_send_index;
    int cmd_recv_index;
    bool prime_state;
    std::queue <std::string> cmd_queue;

public:

    UGCommand();
    ~UGCommand();

    // send current command until acknowledged
    int update( SGSerialPort *serial );

    void add( const std::string command );
    inline int cmd_queue_size() {
        return cmd_queue.size();
    }
    inline void update_cmd_sequence( int sequence ) {
        cmd_recv_index = sequence;
    }
};


extern UGCommand command_mgr;