#pragma once

#include <QtCore/QVariant>
#include <string>
#include <list>

enum ModuleType
{
    comm=1,
    purify=2,
    calculate=3,
    transfer=4,
    store=5,
    control=6,
};

struct DataItem
{
    int Id;
    std::string DataName;
    std::string Code;
    std::string DataType;
    bool Displayed;
    std::string Description;
    std::string ToString()
    {
        return Code + DataName;
    }
};

struct Setting
{
    std::string Name;
    QVariant    qValue;
};

struct ModuleInfo
{
    int Id;                         // 实例编号,不是moduleinfo里的编号，而是intelligentcontrol里的编号
    ModuleType Type;                // 类型
    std::string Name;               // 名称
    std::string Code;               // 标识码
    std::string Model;              // 型号
    std::string AssemblyName;       // 组件程序（dll、jar）名字，含路径
    std::string ClassName;          // 组件的 类名
    std::string Description;        // 描述
    std::string Version;            // 版本
    int serverId;                   // 所属服务器编号

    std::list<std::string> lstInputs;// 输入
    std::vector<Setting> vSettings; // 自定义配置
    std::list<DataItem> Properties;
};

struct DeviceInfo
{
    int Id;
    std::string Name;                // 名称
    std::string Type;                // 类型
    std::string Code;                // 标识码
    std::string Model;               // 型号,通信组件的Code属性
    int ServerId;                    //
    ModuleInfo ModuleInfo;           //
    std::string Description;         // 描述
    //std::list<DataItem> Properties;
};

struct AlarmRuler
{
    std::string NodeCode;            // 节点-标识码
    std::string DataItemCode;        // 数据项-标识码
    std::string Operator;            // 运算符
    double dbOperator1;              // 操作数1
    double dbOperator2;              // 操作数2
    uint nKeepTimes;                 // 保持次数
};

struct Config
{
    std::string serverId;
    std::string appName;
};
