using Atomx.Common.Constant;
using Atomx.Common.Entities;

namespace Atomx.Data.CacheServices
{
    //public partial interface ICacheService
    //{
    //    /// <summary>
    //    /// 获取可付款的货币类型和支付通道信息
    //    /// </summary>
    //    /// <param name="reload"></param>
    //    /// <returns></returns>
    //    Task<CurrencyChannelModel> GetCurrencyChannel(bool? reload = false);

    //    /// <summary>
    //    /// 获取支持充值的货币信息
    //    /// </summary>
    //    /// <returns></returns>
    //    Task<List<Currency>> GetDepositCurrencies();

    //    /// <summary>
    //    /// 获取所有可用的货币信息 
    //    /// </summary>
    //    /// <param name="reload"></param>
    //    /// <returns></returns>
    //    Task<List<Currency>?> GetCurrencies(bool? reload = null);

    //    /// <summary>
    //    /// 通过ID获取或更新缓存
    //    /// </summary>
    //    /// <param name="id"></param>
    //    /// <param name="data"></param>
    //    /// <returns></returns>
    //    Task<Currency> GetCurrenciesById(long id, Currency? data = null);

    //    /// <summary>
    //    /// 根据代码获取货币信息
    //    /// </summary>
    //    /// <param name="code"></param>
    //    /// <returns></returns>
    //    Task<Currency> GetCurrency(string code);

    //    /// <summary>
    //    /// 从缓存中删除数据
    //    /// </summary>
    //    /// <param name="id"></param>
    //    /// <returns></returns>
    //    Task RemoveCurrencies(long id);

    //}
    //public partial class CacheService : ICacheService
    //{
    //    /// <summary>
    //    /// 获取可付款的货币类型和支付通道信息
    //    /// </summary>
    //    /// <param name="reload"></param>
    //    /// <returns></returns>
    //    public async Task<CurrencyChannelModel> GetCurrencyChannel(bool? reload = false)
    //    {
    //        var cacheData = await GetCacheAsync<CurrencyChannelModel>(CacheKeys.CurrencyChannel);
    //        bool needReload = reload.HasValue ? reload.Value : false;
    //        if (cacheData == null || needReload)
    //        {
    //            cacheData = new CurrencyChannelModel();

    //            var relation = _dbContext.CurrencyChannelRelations.ToList();
    //            var currency = _dbContext.Currencies.Where(p => p.EnablePay).ToList();
    //            var channels = _dbContext.PaymentChannels.Where(p => p.Status == (int)PaymentChannelStatus.Enable).ToList();

    //            cacheData.Currencies = currency;
    //            foreach (var item in relation)
    //            {
    //                var channel = channels.SingleOrDefault(p => p.Id == item.PayChannelId);
    //                if (channel != null)
    //                {
    //                    var data = new CurrencyPaymentChannelModel()
    //                    {
    //                        Id = channel.Id,
    //                        Config = channel.Config,
    //                        CreateTime = channel.CreateTime,
    //                        Description = channel.Description,
    //                        DisplayOrder = channel.DisplayOrder,
    //                        EndTime = item.EndTime,
    //                        Extended = item.Extended,
    //                        Name = channel.Name,
    //                        Network = channel.Network,
    //                        StartTime = item.StartTime,
    //                        Status = channel.Status,
    //                        TimeZone = item.TimeZone,
    //                        Type = channel.Type,
    //                        UpdateTime = channel.UpdateTime,
    //                        CurrencyId = item.CurrencyId,
    //                        Account = channel.Account,
    //                        Title = channel.Title,
    //                    };
    //                    cacheData.CurrencyPaymentChannels.Add(data);

    //                }
    //            }
    //            await SetCacheAsync(CacheKeys.CurrencyChannel, cacheData);
    //        }
    //        return cacheData;
    //    }

    //    /// <summary>
    //    /// 获取支持充值的货币信息
    //    /// </summary>
    //    /// <returns></returns>
    //    public async Task<List<Currency>> GetDepositCurrencies()
    //    {
    //        var data = await GetCurrencies();
    //        return data.Where(p => p.EnablePay).ToList();
    //    }

    //    public async Task<List<Currency>?> GetCurrencies(bool? reload = null)
    //    {
    //        var cacheData = await GetCacheAsync<List<Currency>>(CacheKeys.Currencies);
    //        if (cacheData == null || reload.HasValue)
    //        {
    //            var data = _dbContext.Currencies.Where(p => p.Enabled).ToList();
    //            if (data != null)
    //            {
    //                cacheData = data;
    //                await SetCacheAsync(CacheKeys.Currencies, cacheData);
    //            }
    //        }
    //        return cacheData;
    //    }

    //    public async Task<Currency> GetCurrenciesById(long id, Currency? data = null)
    //    {
    //        var cacheData = await GetCurrencies();
    //        if (data != null)
    //        {
    //            var manufacturer = cacheData.SingleOrDefault(p => p.Id == id);
    //            if (manufacturer != null)
    //            {
    //                cacheData.Remove(manufacturer);
    //                cacheData.Add(data);
    //                await SetCacheAsync(CacheKeys.Currencies, cacheData);
    //            }
    //            else
    //            {
    //                cacheData.Add(data);
    //                await SetCacheAsync(CacheKeys.Currencies, cacheData);
    //            }
    //            return data;
    //        }
    //        else
    //        {
    //            var manufacturer = cacheData.SingleOrDefault(p => p.Id == id);
    //            if (manufacturer != null)
    //            {
    //                return manufacturer;
    //            }
    //            return new Currency();
    //        }
    //    }

    //    /// <summary>
    //    /// 根据代码获取货币信息
    //    /// </summary>
    //    /// <param name="code"></param>
    //    /// <returns></returns>
    //    public async Task<Currency> GetCurrency(string code)
    //    {
    //        var cacheData = await GetCurrencies();
    //        if (cacheData != null)
    //        {
    //            return cacheData.SingleOrDefault(p => p.CurrencyCode == code);
    //        }
    //        return new Currency();
    //    }

    //    public async Task RemoveCurrencies(long id)
    //    {
    //        var cacheData = await GetCurrencies();
    //        if (cacheData != null)
    //        {
    //            var data = cacheData.SingleOrDefault(p => p.Id == id);
    //            if (data != null)
    //            {
    //                cacheData.Remove(data);
    //                await SetCacheAsync(CacheKeys.Currencies, cacheData);
    //            }
    //        }
    //    }
    //}
}
