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

namespace OfficeOpenXml;

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();
  }
}
