using System;
using System.Reflection;
using System.Windows;
using TeamAAS.Feeder.Attributes;
using TeamAAS.Feeder.Interfaces;
namespace TeamAAS.Feeder.UI
{
///
/// 供料器调试页工厂:按供料器类型上的 [Feeder] 特性选择品牌专属调试页;
/// 未声明 DebugPageType 时回退到库内通用页 (永不返回 null)。
/// 创建成功后自动把供料器实例绑定给实现了 的页面。
/// 与 Camera/Communication 等硬件库一致:宿主 SettingView 只用单个 ContentControl 承载,
/// 未选设备时绑定为 null 自然空白,选中设备即切到对应类型的页面。
///
public static class FeederDebugPageFactory
{
public static FrameworkElement Create(IFeeder feeder)
{
Type pageType = typeof(DefaultFeederDebugPage);
if (feeder != null)
{
var attr = feeder.GetType().GetCustomAttribute(inherit: false);
if (attr != null && attr.DebugPageType != null && typeof(FrameworkElement).IsAssignableFrom(attr.DebugPageType))
pageType = attr.DebugPageType;
}
FrameworkElement page = null;
try
{
page = Activator.CreateInstance(pageType) as FrameworkElement;
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine($"创建供料器调试页 {pageType.Name} 失败: {ex.Message}");
}
if (page == null) page = new DefaultFeederDebugPage();
if (feeder != null && page is IFeederDebugPage)
((IFeederDebugPage)page).BindFeeder(feeder);
return page;
}
}
}