using System.Collections;
using System.Collections.Generic;
using System.Xml;

namespace AppsheetEpplus;

public class ExcelProtectedRangeCollection : XmlHelper, IEnumerable<ExcelProtectedRange> {
  internal ExcelProtectedRangeCollection(XmlNamespaceManager nsm, XmlNode topNode)
      : base(nsm, topNode) {
    foreach (XmlNode protectedRangeNode in topNode.SelectNodes(
        "d:protectedRanges/d:protectedRange",
        nsm)) {
      if (!(protectedRangeNode is XmlElement)) {
        continue;
      }
      _baseList.Add(new(nsm, topNode));
    }
  }

  private readonly List<ExcelProtectedRange> _baseList = new();

  public ExcelProtectedRange this[int index] => _baseList[index];

  IEnumerator<ExcelProtectedRange> IEnumerable<ExcelProtectedRange>.GetEnumerator() {
    return _baseList.GetEnumerator();
  }

  IEnumerator IEnumerable.GetEnumerator() {
    return _baseList.GetEnumerator();
  }
}
