using System;

namespace AppsheetEpplus;

/// <summary>
/// Represents a parsing of a single input or workbook addrses.
/// </summary>
public class ParsingScope : IDisposable {
  private readonly ParsingScopes _parsingScopes;

  public ParsingScope(ParsingScopes parsingScopes, RangeAddress address)
      : this(parsingScopes, null, address) {}

  public ParsingScope(ParsingScopes parsingScopes, ParsingScope parent, RangeAddress address) {
    _parsingScopes = parsingScopes;
    Parent = parent;
    Address = address;
  }

  /// <summary>
  /// Id of the scope.
  /// </summary>
  public Guid ScopeId { get; private set; } = Guid.NewGuid();

  /// <summary>
  /// The calling scope.
  /// </summary>
  public ParsingScope Parent { get; private set; }

  /// <summary>
  /// The address of the cell currently beeing parsed.
  /// </summary>
  public RangeAddress Address { get; private set; }

  /// <summary>
  /// True if the current scope is a Subtotal function beeing executed.
  /// </summary>
  public bool IsSubtotal { get; set; }

  public void Dispose() {
    _parsingScopes.KillScope(this);
  }
}
