#ifndef PLOTTER_H
#define PLOTTER_H
#include <vector>
#include <string>

/**
 * @brief Abstract interface for plotting flight data.
 */
class Plotter {
public:
    virtual ~Plotter() = default;

    /**
     * @brief Plot a 2D line graph.
     * 
     * @param xData Vector of x-axis values (e.g., time)
     * @param yData Vector of y-axis values (e.g., altitude)
     * @param title Plot title
     * @param xLabel Label for x-axis
     * @param yLabel Label for y-axis
     */
    virtual void plot2D(const std::vector<double>& xData,
                        const std::vector<double>& yData,
                        const std::string& title,
                        const std::string& xLabel,
                        const std::string& yLabel) = 0;


    /**
     * @brief Add a vertical marker at a specific x-axis value.
     * 
     * @param xValue The x position (e.g., time in seconds)
     * @param label Text label to display near the marker
     */
    virtual void addMarker(double xValue, const std::string& label) = 0;

    /**
     * @brief Plot altitude, velocity, and acceleration together on a single canvas.
     *
     * @param time Time points
     * @param altitude Altitude (Z position)
     * @param velocity Vertical velocity
     * @param acceleration Vertical acceleration
     */
    virtual void plotPosVelAcc(const std::vector<double>& time,
        const std::vector<double>& altitude,
        const std::vector<double>& velocity,
        const std::vector<double>& acceleration) = 0;
};

#endif // PLOTTER_H