using Beam.Abstractions;
using HtmlAgilityPack;

namespace Beam.Dynamic;

public enum RelationType {
    Parent,
    Child,
}

public class RelationalDataProvider : IComposableDataProvider<HtmlNode?> {
    
    public RelationType RelationType { get; set; } = RelationType.Parent;
    public IBinding? Content { get; set; }
    
    public HtmlNode? Get(HtmlDocument document) {
        return Select(document);
    }
    public HtmlNode? Get(HtmlNode node) {
        return Select(node);
    }
    public HtmlNode? Select(HtmlDocument doc) {
        return Select(Content?.Select(doc) ?? doc.DocumentNode);
    }
    public HtmlNode? Select(HtmlNode node) {
        return RelationType switch {
            RelationType.Parent => node.ParentNode,
            RelationType.Child => node.FirstChild,
            _ => throw new NotSupportedException()
        };
    }
}