using Autofac;
using Bro.Common.Helper;
using Bro.Common.Interface;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing.Design;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Bro.Common.Model
{
///
/// PLC监听设置
///
public class MonitorSet : IComplexDisplay
{
//[Category("监听配置")]
//[Description("监听设备")]
//[TypeConverter(typeof(MonitorDeviceConverter))]
//public string MonitorDevice { get; set; }
[Category("监听配置")]
[Description("调用方法")]
[TypeConverter(typeof(MonitorCodeConverter))]
public string MethodCode { get; set; }
[Category("监听配置")]
[Description("方法操作配置")]
[TypeConverter(typeof(ComplexObjectConvert))]
[Editor(typeof(IOperationConfigEditor), typeof(UITypeEditor))]
public IOperationConfig OpConfig { get; set; }
///
/// 监听地址索引 按照PLC监听地址从0开始的索引
///
[Category("监听设置")]
[Description("监听地址索引 按照PLC监听地址从0开始的索引")]
public int TriggerIndex { get; set; } = -1;
///
/// 触发值
///
[Category("监听设置")]
[Description("触发值,设置为-999时变化即触发")]
public int TriggerValue { get; set; } = -1;
///
/// 传入数据地址的索引 按照PLC监听地址从0开始的索引集合
///
[Category("监听设置")]
[Description("传入数据地址的索引 按照PLC监听地址从0开始的索引")]
[TypeConverter(typeof(SimpleCollectionConvert))]
public List InputDataIndex { get; set; } = new List();
///
/// 数据地址 实际PLC寄存器的地址,例如 40012
///
[Category("回传设置")]
[Description("回传数据地址 实际PLC寄存器的地址,10进制,例如 40012")]
public int ReplyDataAddress { get; set; } = -1;
///
/// 通知地址 实际PLC寄存器的地址,例如 40012
///
[Category("回传设置")]
[Description("通知地址 实际PLC寄存器的地址,10进制,例如 40012")]
public int NoticeAddress { get; set; } = -1;
//[Browsable(false)]
//[JsonIgnore]
//public List InputDatas { get; set; } = new List();
[Browsable(false)]
[JsonIgnore]
public ProcessResponse Response { get; set; } = new ProcessResponse();
public MonitorSet() { }
//public MonitorSet(int triggerIndex, int triggerValue, List inputDataIndex, int dataIndex, int noticeIndex)
//{
// TriggerIndex = triggerIndex;
// TriggerValue = triggerValue;
// InputDataIndex = inputDataIndex;
// ReplyDataAddress = dataIndex;
// NoticeAddress = noticeIndex;
//}
public string GetDisplayText()
{
using (var scope = GlobalVar.Container.BeginLifetimeScope())
{
List methodList = scope.Resolve>();
//List deviceList = scope.Resolve>();
string desc = "";
//var device = deviceList.FirstOrDefault(u => u.Id == MonitorDevice);
//if (device != null)
//{
// desc += ($"{device.Name}");
//}
//else
//{
// desc += "无设备";
//}
desc += " ";
var method = methodList.FirstOrDefault(u => u.MethodCode == MethodCode);
if (method != null)
{
desc += ($"{method.MethodCode}-{method.MethodDesc}");
}
else
{
desc += "无调用";
}
desc += $"_{TriggerIndex}:{TriggerValue}";
return desc;
}
}
}
public class MonitorCodeConverter : ComboBoxItemTypeConvert
{
public override void GetConvertHash()
{
using (var scope = GlobalVar.Container.BeginLifetimeScope())
{
List methodList = scope.Resolve>();
methodList.ForEach(d =>
{
_hash[d.MethodCode] = d.MethodCode + "_" + d.MethodDesc;
});
}
}
}
public class MonitorDeviceConverter : ComboBoxItemTypeConvert
{
public override void GetConvertHash()
{
using (var scope = GlobalVar.Container.BeginLifetimeScope())
{
List deviceList = scope.Resolve>();
deviceList.ForEach(d =>
{
_hash[d.Id] = d.Name;
});
}
}
}
}