#ifndef SYSROLE_H
#define SYSROLE_H

#include <topcore/topclassabs.h>

class QHBoxLayout;
class TTableView;
class TTreeModel;
class TTreeView;
class TSearchEntry;
class TUiLoader;

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

public slots:
    void reload();
    void copy();
    void createRole();
    void clearData();
    void setRoleData(const QVariantMap &iDataMap);
    void setPermissionData(QVariantMap &iDataMap, const QVariantList &iRgtIdLst);
    QVariantMap getRoleData() const;
    void saveData();
    void loadRgtNames();
    void showAddUser();

    void collapsePermissionTree();
    void expandPermissionTree();

private slots:
    void searchRightList(const QString &iSearchText, const QVariant &iOptions);
    void onNotification(QString iNotifyKeyStr, QVariant iDataVar, QString iUuidStr);
protected:
    void uidChangeEvent(const QString &iUidStr) override;
    void resizeEvent(QResizeEvent *iEvent) override;

private:
    void initRgtTreeView();
    QVariantList getTransferedData(QVariantList iDataLst);
    QVariantMap getItemDataMap(QVariant iValue, int iIdx = 1);
    void getExpandedState(QVariantMap &oStateMap, const QVariantList iDataList);

private:
    QStringList mTreeDataLst;
    QVariantMap mParentNameIndexMap;
    QVariantMap mRefMap;
    QHBoxLayout *mBodyLayout = nullptr;
    TUiLoader *mUiLoader = nullptr;
    TTreeView *mRgtTreeView = nullptr;
    TTreeModel *mRgtTreeModel = nullptr;
    TTableView *mUserTableView = nullptr;
    TSearchEntry *mRgtSearchEntry = nullptr;
    QStringList mRgtFiltLst;
    QStringList mProductCategoryLst;
    bool mRgtLoaded = false;
    bool mFirstLoaded = true;
};

#endif // SYSROLE_H