#pragma once

#include <QtWidgets/QMainWindow>

#include "ui/Dialog.h"

#include "ui_DYTChart.h"

class FitCurveDialog;
class SurfaceDialog;

class DYTChart : public Dialog
{
    Q_OBJECT

public:
    DYTChart(int iType , QWidget *parent = Q_NULLPTR);

    QVariant GetChart();
    void InitChartData(QVariant var);

protected:
    void InitChart(int iType);  // 初始化绘图场景1二维曲线 2二维曲线(y轴对数)3三维曲线
    void InitConnect();  // 信号槽连接

    void ParseAnimationPath(const QString& strFile, std::vector<std::vector<float>>& vecAnimationPath);  // 解析运动轨迹文件
    void ParseTimeStep(const QString& strFile, std::vector<float>& vecTime);  // 解析时间步长文件
    void ParseAntennaPatternFile(const QString& strFile, std::vector<std::vector<float>>& vecAntennaPattern);
    void ParseBeamPointFile(const QString& strFile, std::vector<std::vector<float>>& vecBeamPoint);
    void ParseRD(const QString& strFile, std::vector<std::vector<float>>& vecRDPoint, int iRowCount=64);
    void ParseWave(const QString& strFile, std::vector<std::vector<float>>& vecWavePoint, int iRowCount = 50);

    void InitXTable(const QString& strFilePath);
    void InitYTable(const QString& strFilePath);
    void InitZTable(const QString& strFilePath);

    void UpdateRDCurve(int iTime, int iSelRowCount = 64);

    void Clear();

protected slots:
    void slotSelXFile();   // 选择X数据文件
    void slotSelYFile();   // 选择Y数据文件
    void slotSelZFile();   // 选择Z数据文件
    void slotCurveChanged(int iIndex);  // 切换曲线图类型
    void slotChangeAddedCurve(int iIndex); // 已添加的曲线
    void slotChangedColor();  // 修改颜色
    void slotAdd();   // 添加
    void slotUpdate();  // 更新
    void slotDel();  // 删除

    void slotUpdateTime(double iTime);

signals:
    void signalUpdateData(QVariant var);  // 更新数据
    void signalUpdateColor(QColor color);  // 更新颜色

    void signalAddCurve(QVariant varCurve);   // 添加曲线
    void signalDelCurve(int iID);  // 删除曲线

    void signalAddLgCurve(QVariant varCurve);   // 添加曲线
    void signalDelLgCurve(int iID);  // 删除曲线

    void signalAddSurfaceCurve(QVariant varCurve);   // 添加曲线

private:
    Ui::DYTChartClass ui;

    int m_iCurveID = 0;  // 曲线图ID
    int m_iCurSelID = 0; // 当前选择的曲线ID
    int m_iCurveType = 0; // 曲线类型 1二维曲线 2二维曲线(y轴对数)3三维曲线

    FitCurveDialog* m_p2DCurve = NULL;     // 二维曲线
    FitCurveDialog* m_p2DLgCurve = NULL;   // 二维曲线(y轴对数)
    SurfaceDialog* m_p3DSuf = NULL;   // 三维曲线

    QVariantMap m_varCur3DParamMap;

    int m_iCurTime = 0;
};