using System;
using System.Collections.Generic;
using System.Linq;
namespace FastGithub.Scanner
{
    /// 
    /// GithubContext的扫描历史
    /// 
    sealed class GithubContextHistory
    {
        /// 
        /// 最多保存最的近的10条记录
        /// 
        private const int MAX_LOG_COUNT = 10;
        private record ScanLog(bool Available, TimeSpan Elapsed);
        private readonly Queue scanLogs = new();
        /// 
        /// 获取可用率
        /// 
        /// 
        public double AvailableRate
        {
            get
            {
                if (this.scanLogs.Count == 0)
                {
                    return 0d;
                }
                var availableCount = this.scanLogs.Count(item => item.Available);
                return (double)availableCount / this.scanLogs.Count;
            }
        }
        /// 
        /// 获取平均耗时
        /// 
        /// 
        public TimeSpan AvgElapsed
        {
            get
            {
                var availableCount = 0;
                var availableElapsed = TimeSpan.Zero;
                foreach (var item in this.scanLogs)
                {
                    if (item.Available == true)
                    {
                        availableCount += 1;
                        availableElapsed = availableElapsed.Add(item.Elapsed);
                    }
                }
                return availableCount == 0 ? TimeSpan.MaxValue : availableElapsed / availableCount;
            }
        }
        /// 
        /// 添加记录
        /// 
        /// 是否可用
        /// 扫描耗时
        public void Add(bool available, TimeSpan elapsed)
        {
            this.scanLogs.Enqueue(new ScanLog(available, elapsed));
            while (this.scanLogs.Count > MAX_LOG_COUNT)
            {
                this.scanLogs.Dequeue();
            }
        }
    }
}