using AutoMapper;

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CloudGaming.DtoModel;

/// <summary>
/// 
/// </summary>
[AutoMap(typeof(T_App_Config))]
public class AppConfigCache : T_App_Config
{
    private int? appVersionNum;
    /// <summary>
    /// 版本号
    /// </summary>
    public int AppVersionNum
    {
        get
        {
            if (appVersionNum == null)
            {
                if (AppVersion == null || string.IsNullOrEmpty(AppVersion))
                {
                    appVersionNum = 0;
                }
                else
                {
                    var tempAppVersion = AppVersion;
                    if (AppVersion.StartsWith("+") || AppVersion.StartsWith("-"))
                    {
                        tempAppVersion = AppVersion.Substring(1);

                    }
                    tempAppVersion = tempAppVersion.Replace(".", "");
                    if (int.TryParse(tempAppVersion, out var _appVersion))
                    {
                        appVersionNum = _appVersion;
                    }
                    else
                    {
                        appVersionNum = -1;
                    }
                }
            }
            return appVersionNum ?? -1;
        }
    }

    /// <summary>
    /// 判断版本号
    /// </summary>
    /// <param name="version"></param>
    /// <returns></returns>
    public bool IsAppVersion(string version)
    {
        if (version == null || string.IsNullOrEmpty(version))
        {
            return IsAppVersion(0);
        }
        if (int.TryParse(version.Replace(".", ""), out var v))
        {
            return IsAppVersion(version);
        }
        return false;

    }
    /// <summary>
    /// 判断版本号
    /// </summary>
    /// <param name="version"></param>
    /// <returns></returns>
    public bool IsAppVersion(int version)
    {
        if (AppVersionNum == -1)
        {
            return false;
        }
        if (version == 0 && string.IsNullOrEmpty(AppVersion))
        {
            return true;
        }
        else if (version == 0 && !string.IsNullOrEmpty(AppVersion))
        {
            return false;
        }
        if (string.IsNullOrEmpty(AppVersion))
        {
            return true;
        }

        if (AppVersion.StartsWith("+"))
        {
            //大于 如 1.0.1< 1.0.2
            if (AppVersionNum < version)
            {
                return true;
            }
            return false;
        }

        if (AppVersion.StartsWith("-"))
        {
            //小于 如 1.0.1< 1.0.2
            if (AppVersionNum > version)
            {
                return true;
            }
            return false;
        }
        if (AppVersionNum == version)
        {
            return true;
        }
        return false;
    }


    /// <summary>
    /// 判断当前配置的洲是否匹配给定的洲。
    /// </summary>
    /// <param name="continent">要匹配的洲名称。</param>
    /// <returns>如果匹配则返回 true，否则返回 false。</returns>
    public bool IsContinentMatch(string continent)
    {
        // 如果给定的洲不为空，则检查当前配置的洲是否包含给定的洲
        if (!string.IsNullOrEmpty(continent))
        {
            return !string.IsNullOrEmpty(this.Continent) && (this.Continent + ",").Contains(continent + ",");
        }
        // 如果给定的洲为空，则检查当前配置的洲是否为空
        return string.IsNullOrEmpty(this.Continent);
    }

    /// <summary>
    /// 判断当前配置的国家是否匹配给定的国家。
    /// </summary>
    /// <param name="countryName">要匹配的国家名称。</param>
    /// <returns>如果匹配则返回 true，否则返回 false。</returns>
    public bool IsCountryNameMatch(string countryName)
    {
        // 如果给定的国家不为空，则检查当前配置的国家是否包含给定的国家
        if (!string.IsNullOrEmpty(countryName))
        {
            return !string.IsNullOrEmpty(this.CountryName) && (this.CountryName + ",").Contains(countryName + ",");
        }
        // 如果给定的国家为空，则检查当前配置的国家是否为空
        return string.IsNullOrEmpty(this.CountryName);
    }

    /// <summary>
    /// 判断当前配置的平台是否匹配给定的平台。
    /// </summary>
    /// <param name="plat">要匹配的平台名称。</param>
    /// <returns>如果匹配则返回 true，否则返回 false。</returns>
    public bool IsPlatformMatch(string plat)
    {
        // 如果给定的平台不为空，则检查当前配置的平台是否等于给定的平台
        if (!string.IsNullOrEmpty(plat))
        {
            return (this.Plat == null || string.IsNullOrEmpty(this.Plat)) || this.Plat == plat;
        }
        // 如果给定的平台为空，则检查当前配置的平台是否为空
        return this.Plat == null || string.IsNullOrEmpty(this.Plat);
    }

    /// <summary>
    /// 判断当前配置的渠道号是否匹配给定的渠道号。
    /// </summary>
    /// <param name="bossId">要匹配的渠道号。</param>
    /// <returns>如果匹配则返回 true，否则返回 false。</returns>
    public bool IsChannelIdMatch(string bossId)
    {
        // 如果给定的渠道号不为空，则检查当前配置的渠道号是否包含或等于给定的渠道号
        if (!string.IsNullOrEmpty(bossId))
        {
            return (this.ChannelId == null || string.IsNullOrEmpty(this.ChannelId)) || (this.ChannelId != null && (this.ChannelId == bossId || this.ChannelId.Contains(bossId)));
        }
        // 如果给定的渠道号为空，则检查当前配置的渠道号是否为空
        return this.ChannelId == null || string.IsNullOrEmpty(this.ChannelId);
    }
}
