using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace FLY.OBJComponents.Common
{
    public interface INotifyBufferChanged<T>
    {
        //
        // 摘要:
        //     当集合更改时发生。
        event NotifyBufferChangedEventHandler<T> BufferChanged;
    }

    public delegate void NotifyBufferChangedEventHandler<T>(object sender, NotifyBufferChangedEventArgs<T> e);

    public class NotifyBufferChangedEventArgs<T> : EventArgs
    {
        /// <summary>
        /// 动作
        /// </summary>
        public NotifyBufferChangedAction Action { get; set; }
        /// <summary>
        /// 被修改的数据，可能为空，需要再向Buffer 获取
        /// </summary>
        public IEnumerable<T> Items { get; set; }
        /// <summary>
        /// 最后一条记录ID
        /// </summary>
        public int EndingID { get; set; }
        /// <summary>
        /// 当前修改数据量
        /// </summary>
        public int Count { get; set; }
        /// <summary>
        /// 列表最后一条记录
        /// </summary>
        public int BufferNewestID { get; set; }
        /// <summary>
        /// 列表总数据量
        /// </summary>
        public int BufferCount { get; set; }
    }

    public enum NotifyBufferChangedAction
    {
        //
        // 摘要:
        //     向集合中添加了一个或多个项。
        Add = 0,
        //
        // 摘要:
        //     从集合中移除了一个或多个项。
        Remove = 1,
        //
        // 摘要:
        //     在集合中替换了一个或多个项。
        Replace = 2,
        //
        // 摘要:
        //     集合的内容发生显著更改。
        Reset = 4,
        /// <summary>
        /// 刚连接上
        /// </summary>
        IsConnected=5
    }
}
