
// NetConfig_VC++Dlg.h : 头文件
//

#pragma once
#include "afxcmn.h"
#include "afxpropertygridctrl.h"
#include <vector>
#include "ZNetConfig.h"
#include "PropertyNameDef.h"


struct DeviceInfo
{
    DEV_HANDLE hDev;
    int devType;
    CString ip;
    CString mac;
};

inline CString ErrorCodeStr(ZN_ERR_CODE err)
{
    switch (err)
    {
    case ZN_SUCCESS: return L"执行成功";
    case ZN_ERR_GENERAL: return L"执行失败";
    case ZN_ERR_PARAM: return L"参数传入错误";
    case ZN_ERR_COMMUNICATE: return L"通讯错误";
    case ZN_ERR_NOT_CONNECT: return L"未建立连接";
    case ZN_ERR_DEV_RESPONSE: return L"设备响应错误";
    case ZN_ERR_DEV_TYPE_NOT_SUPPORT: return L"设备类型不支持";
    case ZN_ERR_DEV_NOT_LOAD_INFO: return L"设备属性未加载";
    case ZN_ERR_PROPERTY_NOT_SUPPORT: return L"属性项不支持";
    case ZN_ERR_PASSWORD_CHECK: return L"密码校验失败";
    case ZN_ERR_PARSE_DEV_DATA: return L"设备数据解析错误";
    case ZN_ERR_OPERATE_NOT_SUPPORT: return L"操作命令不支持";
    case ZN_ERR_UPGRADE_FILE_CHECK: return L"升级文件校验失败";
    }

    return L"Unknown";
}

// CNetConfig_VCDlg 对话框
class CNetConfig_VCDlg : public CDialogEx
{
// 构造
public:
	CNetConfig_VCDlg(CWnd* pParent = NULL);	// 标准构造函数

// 对话框数据
	enum { IDD = IDD_NETCONFIG_VC_DIALOG };

	protected:
	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV 支持


// 实现
protected:
	HICON m_hIcon;

	// 生成的消息映射函数
	virtual BOOL OnInitDialog();
	afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
	afx_msg void OnPaint();
	afx_msg HCURSOR OnQueryDragIcon();
	DECLARE_MESSAGE_MAP()
private:
    std::vector<DeviceInfo> m_devices;
    DeviceInfo *m_curDevice = nullptr;
    std::vector<ZN_PROPERTY> m_properties;
public:
    CListCtrl m_listDevs;
    CMFCPropertyGridCtrl m_propertyGrid;
    afx_msg void OnBnClickedBtnSearch();
    afx_msg void OnBnClickedBtnGetConfig();
    afx_msg void OnBnClickedBtnResetDev();
    afx_msg void OnBnClickedBtnRestoreDev();
    afx_msg void OnBnClickedBtnUpgrade();
    afx_msg void OnBnClickedSaveConfig();
    afx_msg void OnBnClickedBtnClearDev();
    void LoadCanfdnet200uProperties(const DeviceInfo *pDevInfo);
    void LoadDeviceCommonProperties(const DeviceInfo *pDevInfo);
    bool SaveModifiedProperty(CMFCPropertyGridProperty *base);
};
