#ifndef SYSCHARTDEVELOPER_H
#define SYSCHARTDEVELOPER_H

#include <topcore/topclassabs.h>
#include <topcore/topclasshelper.h>

class TTabWidget;
class TSqlSelectorV2;
class TSplitter;
class QVBoxLayout;
class TCodeEdit;
class TTableView;
class TUiLoader;
class TSearchEntry;

class SysChartDeveloper: public TopClassAbs
{
    Q_OBJECT
public:
    explicit SysChartDeveloper(const QString &iModuleName = QString(""),
                                          const QVariantMap &iUrlPars = QVariantMap(),
                                          QWidget *iParent = nullptr);
    ~SysChartDeveloper();

public slots:
    void refresh();
    void refreshDatasource();
    void refreshGraph();
    void refreshDatasourceInfo();
    void refreshGraphInfo();
    void saveData();
    void clearData();
    void saveDatasource();
    void saveGraph();
    void setSpecifiedClass(const QString &iClassName);
    QString specifiedClass();
    QVariantList selectedDatasrcDataMaps() const;
    QVariantList selectedGraphDataMaps() const;
    QVariantList selectedDatasrcItems() const;
    QVariantList selectedGraphItems() const;
    QVariantMap detailDataMap() const;
    void setDatasourceModified(const bool &iFlag = true);
    void setGraphModified(const bool &iFlag = true);
    bool isDatasourceModified() const;
    bool isGraphModified() const;
private slots:
    void dataModified(bool iFlag = true);
    void datasourceModified(bool iFlag = true);
    void graphModified(bool iFlag = true);
    void onDataSelectionChanged();
    void onGraphSelectionChanged();

protected:
    void uidChangeEvent(const QString &iUidStr) override;

private:
    void initUi();
    void initTopWidget();
    void initBottomWidget();
    void initDatasourceTab();
    void initGraphTab();
    TSqlSelectorV2 getSqlSelector();

private:
    TTabWidget *mTabNavigation = nullptr;
    TTabWidget *mTabDataGraph = nullptr;
    TSplitter *mMainSplitter = nullptr;
    QVBoxLayout *mMainLayout;
    TCodeEdit *mEdtGraph = nullptr;
    TCodeEdit *mEdtParam = nullptr;
    TTableView *mDatasourceTable = nullptr;
    TTableView *mGraphTable = nullptr;
    QWidget *mDatasourceWgt = nullptr;
    QWidget *mGraphWgt = nullptr;
    TSearchEntry *mSearchEntryData = nullptr;
    TSearchEntry *mSearchEntryGraph = nullptr;
    TUiLoader *mUiLoaderData = nullptr;
    TUiLoader *mUiLoaderGraph = nullptr;
    TopClassTableConf mTableConf;
    QString mSpecifiedClass;
    QVariantMap mDetailDataMap;
    bool mDatasourceModified = false;
    bool mGraphModified = false;
};

#endif // SYSCHARTDEVELOPER_H