#ifndef CHARTLINE_H
#define CHARTLINE_H

#include <QtCharts/QChartView>
#include <QtCharts/QLineSeries>
#include <QtCharts/QScatterSeries>
#include <QtCharts/QValueAxis>
#include <QMap>
#include <QPixmap>
#include <QList>
#include <QGraphicsPixmapItem>

QT_CHARTS_USE_NAMESPACE

    struct DataSeries {
    QString seriesName;
    QColor lineColor;
    QPixmap markerIcon;
    QList<QPointF> data;
};

class ChartLine : public QChartView
{
    Q_OBJECT
public:
    explicit ChartLine(QWidget *parent = nullptr);

    // 设置图表标题和轴标签
    void setChartLabels(const QString &chartTitle,
                        const QString &xAxisLabel,
                        const QString &yAxisLabel);

    // 添加一个数据系列
    void addDataSeries(const DataSeries &series);

    // 移除一个数据系列
    void removeDataSeries(const QString &seriesName);

    // 更新指定数据系列的数据
    void updateDataSeries(const QString &seriesName, const QList<QPointF> &data);

protected:
    void resizeEvent(QResizeEvent *event) override;

private:
    QChart *m_chart;
    QValueAxis *m_axisX;
    QValueAxis *m_axisY;

    // 统一的折线系列
    QLineSeries *m_lineSeries;

    // 存储所有数据系列信息
    QMap<QString, DataSeries> m_dataSeriesMap;

    // 存储每个数据系列对应的散点系列
    QMap<QString, QScatterSeries*> m_scatterSeriesMap;

    // 存储每个系列的自定义图标
    QMap<QString, QList<QGraphicsPixmapItem*>> m_pixmapItemsMap;

    // 重新构建折线数据
    void rebuildLineSeries();

    // 更新图标位置
    void updateMarkers();
};

#endif // CHARTLINE_H
