using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
namespace FastGithub.DomainResolve
{
    /// 
    /// IP延时集合
    /// 
    [DebuggerDisplay("Count={Count} IsExpired={IsExpired}")]
    sealed class IPAddressElapsedCollection : IEnumerable
    {
        private readonly List addressElapseds;
        private readonly int creationTickCount = Environment.TickCount;
        private static readonly int maxLifeTime = 60 * 1000;
        /// 
        /// 获取空的
        /// 
        public static IPAddressElapsedCollection Empty = new();
        /// 
        /// 获取数量
        /// 
        public int Count => this.addressElapseds.Count;
        /// 
        /// 获取是否为空
        /// 
        public bool IsEmpty => this.addressElapseds.Count == 0;
        /// 
        /// 获取是否已过期
        /// 
        public bool IsExpired => Environment.TickCount - this.creationTickCount > maxLifeTime;
        /// 
        /// IP延时集合
        /// 
        private IPAddressElapsedCollection()
        {
            this.addressElapseds = new List();
            this.creationTickCount = 0;
        }
        /// 
        /// IP延时集合
        /// 
        /// 
        public IPAddressElapsedCollection(IPAddressElapsed addressElapsed)
        {
            this.addressElapseds = new List { addressElapsed };
        }
        /// 
        /// IP延时集合
        /// 
        /// 
        public IPAddressElapsedCollection(IEnumerable addressElapseds)
        {
            this.addressElapseds = addressElapseds.OrderBy(item => item.Elapsed).ToList();
        }
        /// 
        /// 获取迭代器
        /// 
        /// 
        public IEnumerator GetEnumerator()
        {
            return this.addressElapseds.GetEnumerator();
        }
        IEnumerator IEnumerable.GetEnumerator()
        {
            return this.addressElapseds.GetEnumerator();
        }
    }
}