/*******************************************************************************
 * 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
 * ******************************************************************************
 * Eyal Seagull    Conditional Formatting Adaption    2012-04-03
 *******************************************************************************/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;

namespace OfficeOpenXml.ConditionalFormatting
{
  /// <summary>
  /// Enum for Conditional Format Type ST_CfType §18.18.12. With some changes.
  /// </summary>
  public enum eExcelConditionalFormattingRuleType
  {
    #region Average
    /// <summary>
    /// This conditional formatting rule highlights cells that are above the average
    /// for all values in the range.
    /// </summary>
    /// <remarks>AboveAverage Excel CF Rule Type</remarks>
    AboveAverage,

    /// <summary>
    /// This conditional formatting rule highlights cells that are above or equal
    /// the average for all values in the range.
    /// </summary>
    /// <remarks>AboveAverage Excel CF Rule Type</remarks>
    AboveOrEqualAverage,

    /// <summary>
    /// This conditional formatting rule highlights cells that are below the average
    /// for all values in the range.
    /// </summary>
    /// <remarks>AboveAverage Excel CF Rule Type</remarks>
    BelowAverage,

    /// <summary>
    /// This conditional formatting rule highlights cells that are below or equal
    /// the average for all values in the range.
    /// </summary>
    /// <remarks>AboveAverage Excel CF Rule Type</remarks>
    BelowOrEqualAverage,
    #endregion

    #region StdDev
    /// <summary>
    /// This conditional formatting rule highlights cells that are above the standard
    /// deviationa for all values in the range.
    /// <remarks>AboveAverage Excel CF Rule Type</remarks>
    /// </summary>
    AboveStdDev,

    /// <summary>
    /// This conditional formatting rule highlights cells that are below the standard
    /// deviationa for all values in the range.
    /// </summary>
    /// <remarks>AboveAverage Excel CF Rule Type</remarks>
    BelowStdDev,
    #endregion

    #region TopBottom
    /// <summary>
    /// This conditional formatting rule highlights cells whose values fall in the
    /// bottom N bracket as specified.
    /// </summary>
    /// <remarks>Top10 Excel CF Rule Type</remarks>
    Bottom,

    /// <summary>
    /// This conditional formatting rule highlights cells whose values fall in the
    /// bottom N percent as specified.
    /// </summary>
    /// <remarks>Top10 Excel CF Rule Type</remarks>
    BottomPercent,

    /// <summary>
    /// This conditional formatting rule highlights cells whose values fall in the
    /// top N bracket as specified.
    /// </summary>
    /// <remarks>Top10 Excel CF Rule Type</remarks>
    Top,

    /// <summary>
    /// This conditional formatting rule highlights cells whose values fall in the
    /// top N percent as specified.
    /// </summary>
    /// <remarks>Top10 Excel CF Rule Type</remarks>
    TopPercent,
    #endregion

    #region TimePeriod
    /// <summary>
    /// This conditional formatting rule highlights cells containing dates in the
    /// last 7 days.
    /// </summary>
    /// <remarks>TimePeriod Excel CF Rule Type</remarks>
    Last7Days,

    /// <summary>
    /// This conditional formatting rule highlights cells containing dates in the
    /// last month.
    /// </summary>
    /// <remarks>TimePeriod Excel CF Rule Type</remarks>
    LastMonth,

    /// <summary>
    /// This conditional formatting rule highlights cells containing dates in the
    /// last week.
    /// </summary>
    /// <remarks>TimePeriod Excel CF Rule Type</remarks>
    LastWeek,

    /// <summary>
    /// This conditional formatting rule highlights cells containing dates in the
    /// next month.
    /// </summary>
    /// <remarks>TimePeriod Excel CF Rule Type</remarks>
    NextMonth,

    /// <summary>
    /// This conditional formatting rule highlights cells containing dates in the
    /// next week.
    /// </summary>
    /// <remarks>TimePeriod Excel CF Rule Type</remarks>
    NextWeek,

    /// <summary>
    /// This conditional formatting rule highlights cells containing dates in this
    /// month.
    /// </summary>
    /// <remarks>TimePeriod Excel CF Rule Type</remarks>
    ThisMonth,

    /// <summary>
    /// This conditional formatting rule highlights cells containing dates in this
    /// week.
    /// </summary>
    /// <remarks>TimePeriod Excel CF Rule Type</remarks>
    ThisWeek,

    /// <summary>
    /// This conditional formatting rule highlights cells containing today dates.
    /// </summary>
    /// <remarks>TimePeriod Excel CF Rule Type</remarks>
    Today,

    /// <summary>
    /// This conditional formatting rule highlights cells containing tomorrow dates.
    /// </summary>
    /// <remarks>TimePeriod Excel CF Rule Type</remarks>
    Tomorrow,

    /// <summary>
    /// This conditional formatting rule highlights cells containing yesterday dates.
    /// </summary>
    /// <remarks>TimePeriod Excel CF Rule Type</remarks>
    Yesterday,
    #endregion

    #region CellIs
    /// <summary>
    /// This conditional formatting rule highlights cells in the range that begin with
    /// the given text.
    /// </summary>
    /// <remarks>
    /// Equivalent to using the LEFT() sheet function and comparing values.
    /// </remarks>
    /// <remarks>BeginsWith Excel CF Rule Type</remarks>
    BeginsWith,

    /// <summary>
    /// This conditional formatting rule highlights cells in the range between the
    /// given two formulas.
    /// </summary>
    /// <remarks>CellIs Excel CF Rule Type</remarks>
    Between,

    /// <summary>
    /// This conditional formatting rule highlights cells that are completely blank.
    /// </summary>
    /// <remarks>
    /// Equivalent of using LEN(TRIM()). This means that if the cell contains only
    /// characters that TRIM() would remove, then it is considered blank. An empty cell
    /// is also considered blank.
    /// </remarks>
    /// <remarks>ContainsBlanks Excel CF Rule Type</remarks>
    ContainsBlanks,

    /// <summary>
    /// This conditional formatting rule highlights cells with formula errors.
    /// </summary>
    /// <remarks>
    /// Equivalent to using ISERROR() sheet function to determine if there is
    /// a formula error.
    /// </remarks>
    /// <remarks>ContainsErrors Excel CF Rule Type</remarks>
    ContainsErrors,

    /// <summary>
    /// This conditional formatting rule highlights cells in the range that begin with
    /// the given text.
    /// </summary>
    /// <remarks>
    /// Equivalent to using the LEFT() sheet function and comparing values.
    /// </remarks>
    /// <remarks>ContainsText Excel CF Rule Type</remarks>
    ContainsText,

    /// <summary>
    /// This conditional formatting rule highlights duplicated values.
    /// </summary>
    /// <remarks>DuplicateValues Excel CF Rule Type</remarks>
    DuplicateValues,

    /// <summary>
    /// This conditional formatting rule highlights cells ending with given text.
    /// </summary>
    /// <remarks>
    /// Equivalent to using the RIGHT() sheet function and comparing values.
    /// </remarks>
    /// <remarks>EndsWith Excel CF Rule Type</remarks>
    EndsWith,

    /// <summary>
    /// This conditional formatting rule highlights cells equals to with given formula.
    /// </summary>
    /// <remarks>CellIs Excel CF Rule Type</remarks>
    Equal,

    /// <summary>
    /// This conditional formatting rule contains a formula to evaluate. When the 
    /// formula result is true, the cell is highlighted.
    /// </summary>
    /// <remarks>Expression Excel CF Rule Type</remarks>
    Expression,

    /// <summary>
    /// This conditional formatting rule highlights cells greater than the given formula.
    /// </summary>
    /// <remarks>CellIs Excel CF Rule Type</remarks>
    GreaterThan,

    /// <summary>
    /// This conditional formatting rule highlights cells greater than or equal the
    /// given formula.
    /// </summary>
    /// <remarks>CellIs Excel CF Rule Type</remarks>
    GreaterThanOrEqual,

    /// <summary>
    /// This conditional formatting rule highlights cells less than the given formula.
    /// </summary>
    /// <remarks>CellIs Excel CF Rule Type</remarks>
    LessThan,

    /// <summary>
    /// This conditional formatting rule highlights cells less than or equal the
    /// given formula.
    /// </summary>
    /// <remarks>CellIs Excel CF Rule Type</remarks>
    LessThanOrEqual,

    /// <summary>
    /// This conditional formatting rule highlights cells outside the range in
    /// given two formulas.
    /// </summary>
    /// <remarks>CellIs Excel CF Rule Type</remarks>
    NotBetween,

    /// <summary>
    /// This conditional formatting rule highlights cells that does not contains the
    /// given formula.
    /// </summary>
    /// <remarks>CellIs Excel CF Rule Type</remarks>
    NotContains,

    /// <summary>
    /// This conditional formatting rule highlights cells that are not blank.
    /// </summary>
    /// <remarks>
    /// Equivalent of using LEN(TRIM()). This means that if the cell contains only
    /// characters that TRIM() would remove, then it is considered blank. An empty cell
    /// is also considered blank.
    /// </remarks>
    /// <remarks>NotContainsBlanks Excel CF Rule Type</remarks>
    NotContainsBlanks,

    /// <summary>
    /// This conditional formatting rule highlights cells without formula errors.
    /// </summary>
    /// <remarks>
    /// Equivalent to using ISERROR() sheet function to determine if there is a
    /// formula error.
    /// </remarks>
    /// <remarks>NotContainsErrors Excel CF Rule Type</remarks>
    NotContainsErrors,

    /// <summary>
    /// This conditional formatting rule highlights cells that do not contain
    /// the given text.
    /// </summary>
    /// <remarks>
    /// Equivalent to using the SEARCH() sheet function.
    /// </remarks>
    /// <remarks>NotContainsText Excel CF Rule Type</remarks>
    NotContainsText,

    /// <summary>
    /// This conditional formatting rule highlights cells not equals to with
    /// given formula.
    /// </summary>
    /// <remarks>CellIs Excel CF Rule Type</remarks>
    NotEqual,

    /// <summary>
    /// This conditional formatting rule highlights unique values in the range.
    /// </summary>
    /// <remarks>UniqueValues Excel CF Rule Type</remarks>
    UniqueValues,
    #endregion

    #region ColorScale
    /// <summary>
    /// Three Color Scale (Low, Middle and High Color Scale)
    /// </summary>
    /// <remarks>ColorScale Excel CF Rule Type</remarks>
    ThreeColorScale,

    /// <summary>
    /// Two Color Scale (Low and High Color Scale)
    /// </summary>
    /// <remarks>ColorScale Excel CF Rule Type</remarks>
    TwoColorScale,
    #endregion

    #region IconSet
    /// <summary>
    /// This conditional formatting rule applies a 3 set icons to cells according
    /// to their values.
    /// </summary>
    /// <remarks>IconSet Excel CF Rule Type</remarks>
    ThreeIconSet,

    /// <summary>
    /// This conditional formatting rule applies a 4 set icons to cells according
    /// to their values.
    /// </summary>
    /// <remarks>IconSet Excel CF Rule Type</remarks>
    FourIconSet,

    /// <summary>
    /// This conditional formatting rule applies a 5 set icons to cells according
    /// to their values.
    /// </summary>
    /// <remarks>IconSet Excel CF Rule Type</remarks>
    FiveIconSet,
    #endregion

    #region DataBar
    /// <summary>
    /// This conditional formatting rule displays a gradated data bar in the range of cells.
    /// </summary>
    /// <remarks>DataBar Excel CF Rule Type</remarks>
    DataBar
    #endregion
  }

  /// <summary>
  /// Enum for Conditional Format Value Object Type ST_CfvoType §18.18.13
  /// </summary>
  public enum eExcelConditionalFormattingValueObjectType
  {
    /// <summary>
    /// Formula
    /// </summary>
    Formula,

    /// <summary>
    /// Maximum Value
    /// </summary>
    Max,

    /// <summary>
    /// Minimum Value
    /// </summary>
    Min,

    /// <summary>
    /// Number Value
    /// </summary>
    Num,

    /// <summary>
    /// Percent
    /// </summary>
    Percent,

    /// <summary>
    /// Percentile
    /// </summary>
    Percentile
  }

  /// <summary>
  /// Enum for Conditional Formatting Value Object Position
  /// </summary>
  public enum eExcelConditionalFormattingValueObjectPosition
  {
    /// <summary>
    /// The lower position for both TwoColorScale and ThreeColorScale
    /// </summary>
    Low,

    /// <summary>
    /// The middle position only for ThreeColorScale
    /// </summary>
    Middle,

    /// <summary>
    /// The highest position for both TwoColorScale and ThreeColorScale
    /// </summary>
    High
  }

  /// <summary>
  /// Enum for Conditional Formatting Value Object Node Type
  /// </summary>
  public enum eExcelConditionalFormattingValueObjectNodeType
  {
    /// <summary>
    /// 'cfvo' node
    /// </summary>
    Cfvo,

    /// <summary>
    /// 'color' node
    /// </summary>
    Color
  }

  /// <summary>
  /// Enum for Conditional Formatting Operartor Type ST_ConditionalFormattingOperator §18.18.15
  /// </summary>
  public enum eExcelConditionalFormattingOperatorType
  {
    /// <summary>
    /// Begins With. 'Begins with' operator
    /// </summary>
    BeginsWith,

    /// <summary>
    /// Between. 'Between' operator
    /// </summary>
    Between,

    /// <summary>
    /// Contains. 'Contains' operator
    /// </summary>
    ContainsText,

    /// <summary>
    /// Ends With. 'Ends with' operator
    /// </summary>
    EndsWith,

    /// <summary>
    /// Equal. 'Equal to' operator
    /// </summary>
    Equal,

    /// <summary>
    /// Greater Than. 'Greater than' operator
    /// </summary>
    GreaterThan,

    /// <summary>
    /// Greater Than Or Equal. 'Greater than or equal to' operator
    /// </summary>
    GreaterThanOrEqual,

    /// <summary>
    /// Less Than. 'Less than' operator
    /// </summary>
    LessThan,

    /// <summary>
    /// Less Than Or Equal. 'Less than or equal to' operator
    /// </summary>
    LessThanOrEqual,

    /// <summary>
    /// Not Between. 'Not between' operator
    /// </summary>
    NotBetween,

    /// <summary>
    /// Does Not Contain. 'Does not contain' operator
    /// </summary>
    NotContains,

    /// <summary>
    /// Not Equal. 'Not equal to' operator
    /// </summary>
    NotEqual
  }

  /// <summary>
  /// Enum for Conditional Formatting Time Period Type ST_TimePeriod §18.18.82
  /// </summary>
  public enum eExcelConditionalFormattingTimePeriodType
  {
    /// <summary>
    /// Last 7 Days. A date in the last seven days.
    /// </summary>
    Last7Days,

    /// <summary>
    /// Last Month. A date occuring in the last calendar month.
    /// </summary>
    LastMonth,

    /// <summary>
    /// Last Week. A date occuring last week.
    /// </summary>
    LastWeek,

    /// <summary>
    /// Next Month. A date occuring in the next calendar month.
    /// </summary>
    NextMonth,

    /// <summary>
    /// Next Week. A date occuring next week.
    /// </summary>
    NextWeek,

    /// <summary>
    /// This Month. A date occuring in this calendar month.
    /// </summary>
    ThisMonth,

    /// <summary>
    /// This Week. A date occuring this week.
    /// </summary>
    ThisWeek,

    /// <summary>
    /// Today. Today's date.
    /// </summary>
    Today,

    /// <summary>
    /// Tomorrow. Tomorrow's date.
    /// </summary>
    Tomorrow,

    /// <summary>
    /// Yesterday. Yesterday's date.
    /// </summary>
    Yesterday
  }

  /// <summary>
  /// 18.18.42 ST_IconSetType (Icon Set Type) - Only 3 icons
  /// </summary>
  public enum eExcelconditionalFormatting3IconsSetType
  {
    /// <summary>
    /// (3 Arrows) 3 arrows icon set.
    /// </summary>
    Arrows,

    /// <summary>
    /// (3 Arrows (Gray)) 3 gray arrows icon set.
    /// </summary>
    ArrowsGray,

    /// <summary>
    /// (3 Flags) 3 flags icon set. 
    /// </summary>
    Flags,

    /// <summary>
    /// (3 Signs) 3 signs icon set.
    /// </summary>
    Signs,

    /// <summary>
    /// (3 Symbols Circled) 3 symbols icon set.
    /// </summary>
    Symbols,

    /// <summary>
    /// (3 Symbols) 3 Symbols icon set.
    /// </summary>
    Symbols2,

    /// <summary>
    /// (3 Traffic Lights) 3 traffic lights icon set (#1).
    /// </summary>
    TrafficLights1,

    /// <summary>
    /// (3 Traffic Lights Black) 3 traffic lights icon set with thick black border.
    /// </summary>
    TrafficLights2
  }

  /// <summary>
  /// 18.18.42 ST_IconSetType (Icon Set Type) - Only 4 icons
  /// </summary>
  public enum eExcelconditionalFormatting4IconsSetType
  {
    /// <summary>
    /// (4 Arrows) 4 arrows icon set.
    /// </summary>
    Arrows,

    /// <summary>
    /// (4 Arrows (Gray)) 4 gray arrows icon set.
    /// </summary>
    ArrowsGray,

    /// <summary>
    /// (4 Ratings) 4 ratings icon set.
    /// </summary>
    Rating,

    /// <summary>
    /// (4 Red To Black) 4 'red to black' icon set.
    /// </summary>
    RedToBlack,

    /// <summary>
    /// (4 Traffic Lights) 4 traffic lights icon set.
    /// </summary>
    TrafficLights
  }

  /// <summary>
  /// 18.18.42 ST_IconSetType (Icon Set Type) - Only 5 icons
  /// </summary>
  public enum eExcelconditionalFormatting5IconsSetType
  {
    /// <summary>
    /// (5 Arrows) 5 arrows icon set.
    /// </summary>
    Arrows,

    /// <summary>
    /// (5 Arrows (Gray)) 5 gray arrows icon set.
    /// </summary>
    ArrowsGray,

    /// <summary>
    /// (5 Quarters) 5 quarters icon set.
    /// </summary>
    Quarters,

    /// <summary>
    /// (5 Ratings Icon Set) 5 rating icon set.
    /// </summary>
    Rating
  }
  /// <summary>
  /// 18.18.42 ST_IconSetType (Icon Set Type)
  /// </summary>
  public enum eExcelconditionalFormattingIconsSetType
  {
      /// <summary>
      /// (3 Arrows) 3 arrows icon set.
      /// </summary>
      ThreeArrows,

      /// <summary>
      /// (3 Arrows (Gray)) 3 gray arrows icon set.
      /// </summary>
      ThreeArrowsGray,

      /// <summary>
      /// (3 Flags) 3 flags icon set. 
      /// </summary>
      ThreeFlags,

      /// <summary>
      /// (3 Signs) 3 signs icon set.
      /// </summary>
      ThreeSigns,

      /// <summary>
      /// (3 Symbols Circled) 3 symbols icon set.
      /// </summary>
      ThreeSymbols,

      /// <summary>
      /// (3 Symbols) 3 Symbols icon set.
      /// </summary>
      ThreeSymbols2,

      /// <summary>
      /// (3 Traffic Lights) 3 traffic lights icon set (#1).
      /// </summary>
      ThreeTrafficLights1,

      /// <summary>
      /// (3 Traffic Lights Black) 3 traffic lights icon set with thick black border.
      /// </summary>
      ThreeTrafficLights2,
 
    /// <summary>
    /// (4 Arrows) 4 arrows icon set.
    /// </summary>
    FourArrows,

    /// <summary>
    /// (4 Arrows (Gray)) 4 gray arrows icon set.
    /// </summary>
    FourArrowsGray,

    /// <summary>
    /// (4 Ratings) 4 ratings icon set.
    /// </summary>
    FourRating,

    /// <summary>
    /// (4 Red To Black) 4 'red to black' icon set.
    /// </summary>
    FourRedToBlack,

    /// <summary>
    /// (4 Traffic Lights) 4 traffic lights icon set.
    /// </summary>
    FourTrafficLights,

      /// <summary>
    /// (5 Arrows) 5 arrows icon set.
    /// </summary>
    FiveArrows,

    /// <summary>
    /// (5 Arrows (Gray)) 5 gray arrows icon set.
    /// </summary>
    FiveArrowsGray,

    /// <summary>
    /// (5 Quarters) 5 quarters icon set.
    /// </summary>
    FiveQuarters,

    /// <summary>
    /// (5 Ratings Icon Set) 5 rating icon set.
    /// </summary>
    FiveRating
}
}