using System;
using System.Linq;
using Volo.Abp.MultiTenancy;
using Volo.Abp.Text.Formatting;

namespace Yi.Framework.SettingManagement.Domain;

[Serializable]
[IgnoreMultiTenancy]
public class SettingCacheItem
{
    private const string CacheKeyFormat = "pn:{0},pk:{1},n:{2}";

    public string Value { get; set; }

    public SettingCacheItem()
    {

    }

    public SettingCacheItem(string value)
    {
        Value = value;
    }

    public static string CalculateCacheKey(string name, string providerName, string providerKey)
    {
        return string.Format(CacheKeyFormat, providerName, providerKey, name);
    }

    public static string GetSettingNameFormCacheKeyOrNull(string cacheKey)
    {
        var result = FormattedStringValueExtracter.Extract(cacheKey, CacheKeyFormat, true);
        return result.IsMatch ? result.Matches.Last().Value : null;
    }
}
