using System.Diagnostics.CodeAnalysis;
using System.Net;
using System.Net.NetworkInformation;
namespace FastGithub
{
    /// 
    /// dns的终节点
    /// 
    public class IPEndPointOptions
    {
        /// 
        /// IP地址
        /// 
        [AllowNull]
        public string IPAddress { get; set; }
        /// 
        /// 端口
        /// 
        public int Port { get; set; }
        /// 
        /// 转换为IPEndPoint
        /// 
        /// 
        /// 
        public IPEndPoint ToIPEndPoint()
        {
            if (System.Net.IPAddress.TryParse(this.IPAddress, out var address) == false)
            {
                throw new FastGithubException($"无效的ip:{this.IPAddress}");
            }
            if (this.Port == 53 && IsLocalMachineIPAddress(address))
            {
                throw new FastGithubException($"配置的dns值不能指向{nameof(FastGithub)}自身:{this.IPAddress}:{this.Port}");
            }
            return new IPEndPoint(address, this.Port);
        }
        /// 
        /// 是否为本机ip
        /// 
        /// 
        /// 
        private static bool IsLocalMachineIPAddress(IPAddress address)
        {
            foreach (var @interface in NetworkInterface.GetAllNetworkInterfaces())
            {
                foreach (var addressInfo in @interface.GetIPProperties().UnicastAddresses)
                {
                    if (addressInfo.Address.Equals(address))
                    {
                        return true;
                    }
                }
            }
            return false;
        }
    }
}