using System;
namespace ClosedXML.Excel
{
    public enum XLTopBottomType { Items, Percent }
    public interface IXLFilterColumn
    {
        void Clear();

        IXLFilteredColumn AddFilter<T>(T value) where T : IComparable<T>;

        void Top(Int32 value, XLTopBottomType type = XLTopBottomType.Items);
        void Bottom(Int32 value, XLTopBottomType type = XLTopBottomType.Items);
        void AboveAverage();
        void BelowAverage();

        IXLFilterConnector EqualTo<T>(T value) where T : IComparable<T>;
        IXLFilterConnector NotEqualTo<T>(T value) where T : IComparable<T>;
        IXLFilterConnector GreaterThan<T>(T value) where T : IComparable<T>;
        IXLFilterConnector LessThan<T>(T value) where T : IComparable<T>;
        IXLFilterConnector EqualOrGreaterThan<T>(T value) where T : IComparable<T>;
        IXLFilterConnector EqualOrLessThan<T>(T value) where T : IComparable<T>;
        void Between<T>(T minValue, T maxValue) where T : IComparable<T>;
        void NotBetween<T>(T minValue, T maxValue) where T : IComparable<T>;
        IXLFilterConnector BeginsWith(String value);
        IXLFilterConnector NotBeginsWith(String value);
        IXLFilterConnector EndsWith(String value);
        IXLFilterConnector NotEndsWith(String value);
        IXLFilterConnector Contains(String value);
        IXLFilterConnector NotContains(String value);

        XLFilterType FilterType { get; set; }
        Int32 TopBottomValue { get; set; }
        XLTopBottomType TopBottomType { get; set; }
        XLTopBottomPart TopBottomPart { get; set; }
        XLFilterDynamicType DynamicType { get; set; }
        Double DynamicValue { get; set; }

        IXLFilterColumn SetFilterType(XLFilterType value);
        IXLFilterColumn SetTopBottomValue(Int32 value);
        IXLFilterColumn SetTopBottomType(XLTopBottomType value);
        IXLFilterColumn SetTopBottomPart(XLTopBottomPart value);
        IXLFilterColumn SetDynamicType(XLFilterDynamicType value);
        IXLFilterColumn SetDynamicValue(Double value);

    }
}