using System;
using System.Net;
using System.Threading;
namespace FastGithub.Scanner
{
    /// 
    /// Github扫描上下文
    /// 
    sealed class GithubContext : DomainAddress, IEquatable
    {
        /// 
        /// 获取或设置是否可用
        /// 
        public bool Available { get; set; }
        /// 
        /// 设置取消令牌
        /// 
        public CancellationToken CancellationToken { get; }
        /// 
        /// 获取扫描历史信息
        /// 
        public GithubContextHistory History { get; } = new();
        /// 
        /// Github扫描上下文
        /// 
        /// 
        /// 
        public GithubContext(string domain, IPAddress address)
            : this(domain, address, CancellationToken.None)
        {
        }
        /// 
        /// Github扫描上下文
        /// 
        /// 
        /// 
        /// 
        public GithubContext(string domain, IPAddress address, CancellationToken cancellationToken)
            : base(domain, address)
        {
            this.CancellationToken = cancellationToken;
        }
        public bool Equals(GithubContext? other)
        {
            return base.Equals(other);
        }
        /// 
        /// 转换为为统计信息
        /// 
        /// 
        public string ToStatisticsString()
        {
            var rate = Math.Round(this.History.AvailableRate * 100, 2);
            return $"{{Address={this.Address}, AvailableRate={rate}%, AvgElapsed={this.History.AvgElapsed.TotalSeconds}s}}";
        }
    }
}