// *****************************************************************************
// ��Ȩ���У�C��2023~2099 �Ϻ����ɳ������������޹�˾
// ��������Ȩ��
// *****************************************************************************
// ���� : ���
// �汾 : 1.0
// ����˵��:
//          ���ݿ������
// *****************************************************************************
#ifndef __SQLOPERATION_H__
#define __SQLOPERATION_H__ 1
#include <QString>
#include <QJsonDocument>
#include <QDebug>
#include <QSqlQuery>
#include <QSqlDatabase>
#include <QJsonObject>
#include <QJsonArray>
#include "CViewInterface.h"
#include <QMap>

//#define MENU_TABLE_NAME  "Menu"
//#define HOME_TABLE_NAME  "HomeProduct"
//#define Dir_Calibration_TABLE_NAME "Dir_Calibration"
//#define Dir_Diagnosis_TABLE_NAME "Dir_Diagnosis"
//#define Dir_Message_TABLE_NAME "Dir_Message"
//#define Dir_ModuleConfig_TABLE_NAME "Dir_ModuleConfig"
//#define Dir_ProductAssist_TABLE_NAME "Dir_ProductAssist"
//#define Dir_Programme_TABLE_NAME "Dir_Programme"
//#define Dir_SystemInfo_TABLE_NAME "Dir_SystemInfo"




struct Table_Control_Data
{
    //��ǰĿ¼�� ÿ�������Ӧ������
    //QMap<QString, QList<CONFIG_BASE_STRUCT>> configData;

    QList<CONFIG_BASE_STRUCT> controlDataList;
    QString tableName;
    bool allChangeFlag = true; //��ʱ����,�ⲿ��ȡʱʹ��

   // QList<CONFIG_BASE_STRUCT> configData;
    //bool IsThirdLevel = false; //��ʱ����
    
};

// ҳ���л�����
struct ST_APP_CONFIG
{
    int nID;
    int nGroupId_R; // Group 
    int nIndex_R;   // Group ����ڼ���
    int nGroupId_L; // Group 
    int nIndex_L;   // Group ����ڼ���
};


class SqlOperation
{
public:
    SqlOperation();

    // ��ȡ����ʵ��
    static SqlOperation& GetInstance();

public:

    //�������ݿ�����
    int LoadSql();

    //�������в˵�
    int loadMenu();

    int loadAllDirectories();

    //�������пؼ�����
    int loadAllControlData();

    //���ݱ������ּ��ص���Ŀ¼,ÿ��QJsonObject����һ��Ŀ¼�������Ϣ
    int loadDirectories(QString tableName, QList<QJsonObject>& directories);

    //����ָ�������µĿؼ�����
    int loadGivenTableControlData(QString tableName, Table_Control_Data& controlData);

    //����ID���ز˵�����
    //int loadMenuName(int id, QString& name);


    //ͨ���������֣�Ŀ¼Id,���ҿؼ����ݼ���ť����
   // QJsonObject fetchThirdLevelData(QString multiTableName, int directoryId, const int& userPrivilege);




    //���ݱ������ּ��û��ȼ�������Ŀ¼
    int GetDirectories(QString tableName, const int& userPrivilege, QList<QJsonObject>& directories);

    //���ݶ���������ֻ�ȡ����Ŀ¼�µĿؼ���Ϣ,������ť
    int GetThirdDirControlData(QString multiTableName, const int& userPrivilege, QList<Table_Control_Data>& data,bool& allChangeFalg);

    //���ݶ���������ֻ�ȡ����Ŀ¼�µİ�ť, ������ȡ��ť
    int GetThirdDirButtons(QString multiTableName, const int& userPrivilege, QList<CONFIG_BASE_STRUCT>& buttons);

    int GetMuneName(int id, QString& name);

    //���¸����������֣������ؼ����ֵ�����, �������ݵ����ش洢�ͺ��
    int updateControlData(QString tableName, QString name, const QString& currentValue);


    //ͨ���������ؼ������������ݿ��һ��value�����µ����ݿ�
    int updateDb(QString tableName, QString name, const QString currentValue);

   // bool GetDirectories(QString tableName, const int& userPrivilege, QList<CONFIG_BASE_STRUCT>& directories);

    int LoadAppConfig();

private:
    void ErrorInfo(const QString& strError);

    bool isModuleTable(QString tableName);

    int LoadControlDataFromModule(std::string tableName, Table_Control_Data& controlData);

    void DataChange(string strDbName, string strTableName);

private:

    ns_module::CViewInterface* m_pCViewInterface;

    //ÿ��Ŀ¼�������ֶ�Ӧ��Ŀ¼
    QMap<QString, QList<QJsonObject>> m_mapAllDirectories;
    /*
    * QJsonObject:
    *   {["Id"]:;
        ["Name"];
        ["ParentId"]
        ["IsThirdLevel"];
        ["Separator"];
        ["UserGrade"];
        ["Circle"];
        ["TableName"]:{
                        []
                        }
        ;}
        TableName ��ʽ�� BondHead,1,2
    */

    //ÿ������Ŀ¼��(���ܰ���������ݱ���) ��Ӧ������
   // QMap<int, Third_Dir_Control_Data> m_mapControlData;

    //���б����Ӧ������
    //QMap<QString, QList<CONFIG_BASE_STRUCT>> m_mapTableControlData;


    //���пؼ�����
    //ModuleConfig.db
    QList<Table_Control_Data>       m_allControlData;

    //ÿ��ID��Ӧ�˵���
    QMap<int, QString>              m_mapMenu;


    /**ҳ��������Ϣ
     */
    ST_APP_CONFIG                   m_appConifg;

    //Ŀ¼����
    const QString  MENU_TABLE_NAME = "Menu";
    const QString  HOME_TABLE_NAME = "HomeProduct";
    const QString  Dir_Calibration_TABLE_NAME = "Dir_Calibration";
    const QString  Dir_Diagnosis_TABLE_NAME = "Dir_Diagnosis";
    const QString  Dir_Message_TABLE_NAME = "Dir_Message";
    const QString  Dir_ModuleConfig_TABLE_NAME = "Dir_ModuleConfig";
    const QString  Dir_ProductAssist_TABLE_NAME = "Dir_ProductAssist";
    const QString  Dir_Programme_TABLE_NAME = "Dir_Programme";
    const QString  Dir_SystemInfo_TABLE_NAME = "Dir_SystemInfo";

    //Module ����


};

#endif  //__SQLOPERATION_H__