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 override string ToString()
        {
            return new Github(
                this.Domain,
                this.Address,
                this.History.AvailableRate,
                this.History.AvgElapsed.TotalSeconds
                ).ToString();
        }
        private record Github(
            string Domain,
            IPAddress Address,
            double AvailableRate,
            double AvgElapsed);
    }
}