using System;
using System.Net;
namespace FastGithub
{
    /// 
    /// Sni自定义值表达式
    /// @domain变量表示取域名值
    /// @ipadress变量表示取ip
    /// @random变量表示取随机值
    ///  
    public struct TlsSniPattern
    {
        /// 
        /// 获取表示式值
        /// 
        public string Value { get; }
        /// 
        /// 无SNI
        /// 
        public static TlsSniPattern None { get; } = new TlsSniPattern(string.Empty);
        /// 
        /// 域名SNI
        /// 
        public static TlsSniPattern Domain { get; } = new TlsSniPattern("@domain");
        /// 
        /// IP值的SNI
        /// 
        public static TlsSniPattern IPAddress { get; } = new TlsSniPattern("@ipaddress");
        /// 
        /// 随机值的SNI
        /// 
        public static TlsSniPattern Random { get; } = new TlsSniPattern("@random");
        /// 
        /// Sni自定义值表达式
        /// 
        /// 表示式值
        public TlsSniPattern(string value)
        {
            this.Value = value;
        }
        /// 
        /// 更新域名
        /// 
        /// 
        public TlsSniPattern WithDomain(string domain)
        {
            var value = this.Value.Replace(Domain.Value, domain, StringComparison.OrdinalIgnoreCase);
            return new TlsSniPattern(value);
        }
        /// 
        /// 更新ip地址
        /// 
        /// 
        public TlsSniPattern WithIPAddress(IPAddress address)
        {
            var value = this.Value.Replace(IPAddress.Value, address.ToString(), StringComparison.OrdinalIgnoreCase);
            return new TlsSniPattern(value);
        }
        /// 
        /// 更新随机数
        /// 
        public TlsSniPattern WithRandom()
        {
            var value = this.Value.Replace(Random.Value, Environment.TickCount64.ToString(), StringComparison.OrdinalIgnoreCase);
            return new TlsSniPattern(value);
        }
        /// 
        /// 转换为文本
        /// 
        /// 
        public override string ToString()
        {
            return this.Value;
        }
    }
}