using System.Xml.Serialization;
namespace XSDVisualiser.Core;
///
/// Represents an element or complex content node in the schema.
///
public class SchemaNode
{
[XmlAttribute] public string? Name { get; set; }
[XmlAttribute] public string? Namespace { get; set; }
[XmlAttribute] public string? TypeName { get; set; }
[XmlAttribute] public string? BuiltInType { get; set; }
[XmlAttribute] public bool IsNillable { get; set; }
[XmlElement] public Occurs Cardinality { get; set; } = new();
[XmlElement] public ConstraintSet? Constraints { get; set; }
[XmlArray("Attributes")]
[XmlArrayItem("Attribute")]
public List Attributes { get; set; } = new();
[XmlArray("Children")]
[XmlArrayItem("Element")]
public List Children { get; set; } = new();
[XmlAttribute] public string? ContentModel { get; set; } // sequence | choice | all | simple
///
/// Human-readable documentation extracted from xsd:annotation/xsd:documentation.
/// Prefer element-level documentation; falls back to type-level documentation.
///
[XmlElement]
public string? Documentation { get; set; }
public override string ToString()
{
// Used by AutoCompleteBox to get text for filtering and matching
// Prefer Name, then TypeName, and fall back to base implementation
if (!string.IsNullOrEmpty(Name))
return Name!;
if (!string.IsNullOrEmpty(TypeName))
return TypeName!;
return base.ToString();
}
}