﻿/*******************************************************************************
 * You may amend and distribute as you like, but don't remove this header!
 *
 * EPPlus provides server-side generation of Excel 2007/2010 spreadsheets.
 * See http://www.codeplex.com/EPPlus for details.
 *
 * Copyright (C) 2011  Jan Källman
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.

 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 * See the GNU Lesser General Public License for more details.
 *
 * The GNU Lesser General Public License can be viewed at http://www.opensource.org/licenses/lgpl-license.php
 * If you unfamiliar with this license or have questions about it, here is an http://www.gnu.org/licenses/gpl-faq.html
 *
 * All code and executables are provided "as is" with no warranty either express or implied.
 * The author accepts no liability for any damage or loss of business that this product may cause.
 *
 * Code change notes:
 *
 * Author							Change						Date
 * ******************************************************************************
 * Jan Källman		Added		21-MAR-2011
 * Jan Källman		License changed GPL-->LGPL 2011-12-16
 *******************************************************************************/

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

namespace OfficeOpenXml.Table.PivotTable;

/// <summary>
/// A collection of pivottable objects
/// </summary>
public class ExcelPivotTableCollection : IEnumerable<ExcelPivotTable> {
  private readonly List<ExcelPivotTable> _pivotTables = new();
  internal readonly Dictionary<string, int> _pivotTableNames = new();

  internal ExcelPivotTableCollection(ExcelWorksheet ws) {
    foreach (var rel in ws.Part.GetRelationships()) {
      if (rel.RelationshipType == ExcelPackage._schemaRelationships + "/pivotTable") {
        var tbl = new ExcelPivotTable(rel, ws);
        _pivotTableNames.Add(tbl.Name, _pivotTables.Count);
        _pivotTables.Add(tbl);
      }
    }
  }

  public int Count => _pivotTables.Count;

  /// <summary>
  /// The pivottable Index. Base 0.
  /// </summary>
  /// <param name="index"></param>
  /// <returns></returns>
  public ExcelPivotTable this[int index] {
    get {
      if (index < 0 || index >= _pivotTables.Count) {
        throw (new ArgumentOutOfRangeException("PivotTable index out of range"));
      }
      return _pivotTables[index];
    }
  }

  /// <summary>
  /// Pivottabes accesed by name
  /// </summary>
  /// <param name="name">The name of the pivottable</param>
  /// <returns>The Pivotable. Null if the no match is found</returns>
  public ExcelPivotTable this[string name] {
    get {
      if (_pivotTableNames.ContainsKey(name)) {
        return _pivotTables[_pivotTableNames[name]];
      }
      return null;
    }
  }

  public IEnumerator<ExcelPivotTable> GetEnumerator() {
    return _pivotTables.GetEnumerator();
  }

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