/*******************************************************************************
 * 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.Globalization;
using System.Xml;

namespace OfficeOpenXml.Table.PivotTable;

/// <summary>
/// Base class for pivot table field groups
/// </summary>
public class ExcelPivotTableFieldGroup : XmlHelper {
  internal ExcelPivotTableFieldGroup(XmlNamespaceManager ns, XmlNode topNode)
      : base(ns, topNode) {}
}

/// <summary>
/// A date group
/// </summary>
public class ExcelPivotTableFieldDateGroup : ExcelPivotTableFieldGroup {
  internal ExcelPivotTableFieldDateGroup(XmlNamespaceManager ns, XmlNode topNode)
      : base(ns, topNode) {}

  private const string _groupByPath = "d:fieldGroup/d:rangePr/@groupBy";

  /// <summary>
  /// How to group the date field
  /// </summary>
  public eDateGroupBy GroupBy {
    get {
      string v = GetXmlNodeString(_groupByPath);
      if (v != "") {
        return (eDateGroupBy)Enum.Parse(typeof(eDateGroupBy), v, true);
      }
      throw (new("Invalid date Groupby"));
    }
    private set =>
      SetXmlNodeString(_groupByPath, value.ToString().ToLower(CultureInfo.InvariantCulture));
  }

  /// <summary>
  /// Auto detect start date
  /// </summary>
  public bool AutoStart => GetXmlNodeBool("@autoStart", false);

  /// <summary>
  /// Auto detect end date
  /// </summary>
  public bool AutoEnd => GetXmlNodeBool("@autoStart", false);
}

/// <summary>
/// A pivot table field numeric grouping
/// </summary>
public class ExcelPivotTableFieldNumericGroup : ExcelPivotTableFieldGroup {
  internal ExcelPivotTableFieldNumericGroup(XmlNamespaceManager ns, XmlNode topNode)
      : base(ns, topNode) {}

  private const string _startPath = "d:fieldGroup/d:rangePr/@startNum";

  /// <summary>
  /// Start value
  /// </summary>
  public double Start => (double)GetXmlNodeDoubleNull(_startPath);

  private const string _endPath = "d:fieldGroup/d:rangePr/@endNum";

  /// <summary>
  /// End value
  /// </summary>
  public double End => (double)GetXmlNodeDoubleNull(_endPath);

  private const string _groupIntervalPath = "d:fieldGroup/d:rangePr/@groupInterval";

  /// <summary>
  /// Interval
  /// </summary>
  public double Interval => (double)GetXmlNodeDoubleNull(_groupIntervalPath);
}
