using System;
using System.Collections.Generic;
namespace XericUI.ReflectionUIGenerator
{
///
/// 单个成员的元数据数据结构
/// 纯数据描述 — 不持有反射信息(MemberInfo)和实例引用(TargetInstance)
///
/// 数据的实际读写通过 IAvrgValueAccessorFactory 在 BuildMDVM 阶段创建的 IAvrgValueAccessor 完成。
/// 这使得同一个元数据模板可复用于 C# 反射对象、Material Shader 属性等不同数据源。
///
public class AvrgMemberMetaData
{
// ============ 基本标识 ============
/// 字段/属性名(或 Shader 属性名如 "_MainTex")
public string MemberName { get; set; }
/// UI 显示标签
public string LabelName { get; set; }
/// 单位文本(如 "m/s")
public string UnitLabelName { get; set; }
/// 格式化字符串(如 "{0:F2}")
public string FormatText { get; set; }
/// 值类型
public Type ValueType { get; set; }
///
/// 样式表命名空间(用于 SuperStyleSheet 样式查询)
/// 默认 "default"。可由类级或字段级 [XuiavrgStyleNamespace] 覆写
///
public string StyleNamespace { get; set; } = "default";
// ============ UI 映射 ============
/// 功能标记
public XuiavrgFieldTag Tag { get; set; } = XuiavrgFieldTag.None;
/// 标记索引 (同 Tag 多实例时区分)
public int TagIndex { get; set; }
/// 排序值 (越小越靠前)
public int FieldOrder { get; set; }
/// 编组路径 (以 "/" 分割层级)
public string GroupPath { get; set; }
/// 是否在 UI 中隐藏
public bool Hide { get; set; }
// ============ 默认值与验证 ============
/// 默认值(用于 UI 初始化和回退参考)
public object DefaultValue { get; set; }
/// 属性检查依据标识(默认使用 ValueType.FullName)
public string PropertyCheckKey { get; set; }
/// 是否必填
public bool Required { get; set; }
/// 是否不可为空
public bool NotEmpty { get; set; }
/// 是否启用合理值范围检查
public bool ValidateReasonable { get; set; }
/// 是否启用警告状态检查
public bool ValidateWarning { get; set; }
/// 是否启用无效值状态检查
public bool ValidateInvalid { get; set; }
/// Shader Range 属性下限(null 表示非 Range 属性)
public float? RangeMin { get; set; }
/// Shader Range 属性上限(null 表示非 Range 属性)
public float? RangeMax { get; set; }
// ============ 拆分属性支持 ============
///
/// 子属性路径(仅拆分属性有效)
/// 用于从父值中访问子字段/属性,如 "x"、"y"、"width"
///
public string PropertyPath { get; set; }
///
/// 拆分子元数据列表
/// 由 [XuiavrgSplit] 特性填充
///
public List SubMetaDataList { get; set; }
// ============ 预设选项 (Dropdown/ToggleGroup) ============
/// 预设选项列表
public IReadOnlyList PresetOptions { get; set; }
/// 预设选项合并模式
public PresetOptionsMergeMode OptionsMergeMode { get; set; }
// ============ 扩展 ============
/// 收集到的所有 IXuiavrgAttribute 列表
public List Attributes { get; set; } = new List();
// ============ ★ 核心变更 — 值访问器工厂 ============
///
/// 值访问器工厂
/// 在元数据提取阶段设置(持有 MemberInfo 或 Shader 属性信息)
/// 在 BuildMDVM 阶段调用 CreateAccessor(targetInstance) 创建真正的读写通道
///
public IAvrgValueAccessorFactory AccessorFactory { get; set; }
}
}