/*******************************************************************************
 * 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    2012-04-03
 *******************************************************************************/
using OfficeOpenXml.ConditionalFormatting.Contracts;
using System.Drawing;

namespace OfficeOpenXml.ConditionalFormatting
{
	/// <summary>
	/// Provides functionality for adding Conditional Formatting to a range (<see cref="ExcelRangeBase"/>).
	/// Each method will return a configurable condtional formatting type.
	/// </summary>
	public interface IRangeConditionalFormatting
	{
    /// <summary>
    /// Adds a Above Average rule to the range
    /// </summary>
    /// <returns></returns>
    IExcelConditionalFormattingAverageGroup AddAboveAverage();

    /// <summary>
    /// Adds a Above Or Equal Average rule to the range
    /// </summary>
    /// <returns></returns>
    IExcelConditionalFormattingAverageGroup AddAboveOrEqualAverage();

    /// <summary>
    /// Adds a Below Average rule to the range
    /// </summary>
    /// <returns></returns>
    IExcelConditionalFormattingAverageGroup AddBelowAverage();

    /// <summary>
    /// Adds a Below Or Equal Average rule to the range
    /// </summary>
    /// <returns></returns>
    IExcelConditionalFormattingAverageGroup AddBelowOrEqualAverage();

    /// <summary>
    /// Adds a Above StdDev rule to the range
    /// </summary>
    /// <returns></returns>
    IExcelConditionalFormattingStdDevGroup AddAboveStdDev();

    /// <summary>
    /// Adds a Below StdDev rule to the range
    /// </summary>
    /// <returns></returns>
    IExcelConditionalFormattingStdDevGroup AddBelowStdDev();

    /// <summary>
    /// Adds a Bottom rule to the range
    /// </summary>
    /// <returns></returns>
    IExcelConditionalFormattingTopBottomGroup AddBottom();

    /// <summary>
    /// Adds a Bottom Percent rule to the range
    /// </summary>
    /// <returns></returns>
    IExcelConditionalFormattingTopBottomGroup AddBottomPercent();

    /// <summary>
    /// Adds a Top rule to the range
    /// </summary>
    /// <returns></returns>
    IExcelConditionalFormattingTopBottomGroup AddTop();

    /// <summary>
    /// Adds a Top Percent rule to the range
    /// </summary>
    /// <returns></returns>
    IExcelConditionalFormattingTopBottomGroup AddTopPercent();

    /// <summary>
    /// Adds a Last 7 Days rule to the range
    /// </summary>
    /// <returns></returns>
    IExcelConditionalFormattingTimePeriodGroup AddLast7Days();

    /// <summary>
    /// Adds a Last Month rule to the range
    /// </summary>
    /// <returns></returns>
    IExcelConditionalFormattingTimePeriodGroup AddLastMonth();

    /// <summary>
    /// Adds a Last Week rule to the range
    /// </summary>
    /// <returns></returns>
    IExcelConditionalFormattingTimePeriodGroup AddLastWeek();

    /// <summary>
    /// Adds a Next Month rule to the range
    /// </summary>
    /// <returns></returns>
    IExcelConditionalFormattingTimePeriodGroup AddNextMonth();

    /// <summary>
    /// Adds a Next Week rule to the range
    /// </summary>
    /// <returns></returns>
    IExcelConditionalFormattingTimePeriodGroup AddNextWeek();

    /// <summary>
    /// Adds a This Month rule to the range
    /// </summary>
    /// <returns></returns>
    IExcelConditionalFormattingTimePeriodGroup AddThisMonth();

    /// <summary>
    /// Adds a This Week rule to the range
    /// </summary>
    /// <returns></returns>
    IExcelConditionalFormattingTimePeriodGroup AddThisWeek();

    /// <summary>
    /// Adds a Today rule to the range
    /// </summary>
    /// <returns></returns>
    IExcelConditionalFormattingTimePeriodGroup AddToday();

    /// <summary>
    /// Adds a Tomorrow rule to the range
    /// </summary>
    /// <returns></returns>
    IExcelConditionalFormattingTimePeriodGroup AddTomorrow();

    /// <summary>
    /// Adds a Yesterday rule to the range
    /// </summary>
    /// <returns></returns>
    IExcelConditionalFormattingTimePeriodGroup AddYesterday();

    /// <summary>
    /// Adds a Begins With rule to the range
    /// </summary>
    /// <returns></returns>
    IExcelConditionalFormattingBeginsWith AddBeginsWith();

    /// <summary>
    /// Adds a Between rule to the range
    /// </summary>
    /// <returns></returns>
    IExcelConditionalFormattingBetween AddBetween();

    /// <summary>
    /// Adds a ContainsBlanks rule to the range
    /// </summary>
    /// <returns></returns>
    IExcelConditionalFormattingContainsBlanks AddContainsBlanks();

    /// <summary>
    /// Adds a ContainsErrors rule to the range
    /// </summary>
    /// <returns></returns>
    IExcelConditionalFormattingContainsErrors AddContainsErrors();

    /// <summary>
    /// Adds a ContainsText rule to the range
    /// </summary>
    /// <returns></returns>
    IExcelConditionalFormattingContainsText AddContainsText();

    /// <summary>
    /// Adds a DuplicateValues rule to the range
    /// </summary>
    /// <returns></returns>
    IExcelConditionalFormattingDuplicateValues AddDuplicateValues();

    /// <summary>
    /// Adds a EndsWith rule to the range
    /// </summary>
    /// <returns></returns>
    IExcelConditionalFormattingEndsWith AddEndsWith();

    /// <summary>
    /// Adds a Equal rule to the range
    /// </summary>
    /// <returns></returns>
    IExcelConditionalFormattingEqual AddEqual();

    /// <summary>
    /// Adds a Expression rule to the range
    /// </summary>
    /// <returns></returns>
    IExcelConditionalFormattingExpression AddExpression();

    /// <summary>
    /// Adds a GreaterThan rule to the range
    /// </summary>
    /// <returns></returns>
    IExcelConditionalFormattingGreaterThan AddGreaterThan();

    /// <summary>
    /// Adds a GreaterThanOrEqual rule to the range
    /// </summary>
    /// <returns></returns>
    IExcelConditionalFormattingGreaterThanOrEqual AddGreaterThanOrEqual();

    /// <summary>
    /// Adds a LessThan rule to the range
    /// </summary>
    /// <returns></returns>
    IExcelConditionalFormattingLessThan AddLessThan();

    /// <summary>
    /// Adds a LessThanOrEqual rule to the range
    /// </summary>
    /// <returns></returns>
    IExcelConditionalFormattingLessThanOrEqual AddLessThanOrEqual();

    /// <summary>
    /// Adds a NotBetween rule to the range
    /// </summary>
    /// <returns></returns>
    IExcelConditionalFormattingNotBetween AddNotBetween();

    /// <summary>
    /// Adds a NotContainsBlanks rule to the range
    /// </summary>
    /// <returns></returns>
    IExcelConditionalFormattingNotContainsBlanks AddNotContainsBlanks();

    /// <summary>
    /// Adds a NotContainsErrors rule to the range
    /// </summary>
    /// <returns></returns>
    IExcelConditionalFormattingNotContainsErrors AddNotContainsErrors();

    /// <summary>
    /// Adds a NotContainsText rule to the range
    /// </summary>
    /// <returns></returns>
    IExcelConditionalFormattingNotContainsText AddNotContainsText();

    /// <summary>
    /// Adds a NotEqual rule to the range
    /// </summary>
    /// <returns></returns>
    IExcelConditionalFormattingNotEqual AddNotEqual();

    /// <summary>
    /// Adds a UniqueValues rule to the range
    /// </summary>
    /// <returns></returns>
    IExcelConditionalFormattingUniqueValues AddUniqueValues();

    /// <summary>
    /// Adds a <see cref="ExcelConditionalFormattingThreeColorScale"/> to the range
    /// </summary>
    /// <returns></returns>
    IExcelConditionalFormattingThreeColorScale AddThreeColorScale();

    /// <summary>
    /// Adds a <see cref="ExcelConditionalFormattingTwoColorScale"/> to the range
    /// </summary>
    /// <returns></returns>
    IExcelConditionalFormattingTwoColorScale AddTwoColorScale();

    /// <summary>
    /// Adds a <see cref="IExcelConditionalFormattingThreeIconSet&lt;eExcelconditionalFormatting3IconsSetType&gt;"/> to the range
    /// </summary>
    /// <param name="IconSet"></param>
    /// <returns></returns>
    IExcelConditionalFormattingThreeIconSet<eExcelconditionalFormatting3IconsSetType> AddThreeIconSet(eExcelconditionalFormatting3IconsSetType IconSet);
    /// <summary>
    /// Adds a <see cref="IExcelConditionalFormattingFourIconSet&lt;eExcelconditionalFormatting4IconsSetType&gt;"/> to the range
    /// </summary>
    /// <param name="IconSet"></param>
    /// <returns></returns>
    IExcelConditionalFormattingFourIconSet<eExcelconditionalFormatting4IconsSetType> AddFourIconSet(eExcelconditionalFormatting4IconsSetType IconSet);
    /// <summary>
    /// Adds a <see cref="IExcelConditionalFormattingFiveIconSet"/> to the range
    /// </summary>
    /// <param name="IconSet"></param>
    /// <returns></returns>
    IExcelConditionalFormattingFiveIconSet AddFiveIconSet(eExcelconditionalFormatting5IconsSetType IconSet);
    /// <summary>
    /// Adds a <see cref="IExcelConditionalFormattingDataBarGroup"/> to the range
    /// </summary>
    /// <param name="color"></param>
    /// <returns></returns>
    IExcelConditionalFormattingDataBarGroup AddDatabar(Color color);
    }
}