using System.Xml;
using OfficeOpenXml.Utils;

namespace OfficeOpenXml;

public class ExcelProtectedRange : XmlHelper {
  public string Name {
    get => GetXmlNodeString("@name");
    set => SetXmlNodeString("@name", value);
  }

  private ExcelAddress _address;
  public ExcelAddress Address {
    get {
      if (_address == null) {
        _address = new(GetXmlNodeString("@sqref"));
      }
      return _address;
    }
    set {
      SetXmlNodeString("@sqref", SqRefUtility.ToSqRefAddress(value.Address));
      _address = value;
    }
  }

  internal ExcelProtectedRange(
      string name,
      ExcelAddress address,
      XmlNamespaceManager ns,
      XmlNode topNode)
      : base(ns, topNode) {
    Name = name;
    Address = address;
  }
}
