/*******************************************************************************
 * 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
 *******************************************************************************/

namespace AppsheetEpplus;

/// <summary>
/// Enum for Conditional Format Type ST_CfType §18.18.12. With some changes.
/// </summary>
public enum eExcelConditionalFormattingRuleType {
  /// <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,

  /// <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,

  /// <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,

  /// <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,

  /// <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,

  /// <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,

  /// <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,

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

/// <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,
}
