namespace Grand.Infrastructure.Caching.Constants
{
    public static partial class CacheKey
    {
        #region Settings

        /// <summary>
        /// Key for caching
        /// </summary>
        /// <remarks>
        /// {0} : key - settings name
        /// {1} : store ident
        /// </remarks>
        public static string SETTINGS_BY_KEY => "Grand.setting.{0}.{1}";

        /// <summary>
        /// Key pattern to clear cache
        /// </summary>
        public static string SETTINGS_PATTERN_KEY => "Grand.setting.";

        #endregion

        #region Discounts

        /// <summary>
        /// Key for caching
        /// </summary>
        /// <remarks>
        /// {0} : discount ID
        /// </remarks>
        public static string DISCOUNTS_BY_ID_KEY => "Grand.discount.id-{0}";

        /// <summary>
        /// Key for caching
        /// </summary>
        /// <remarks>
        /// {0} : discount type ?
        /// {1} : store ident
        /// {2} : currency code
        /// </remarks>
        public static string DISCOUNTS_CONTEXT_KEY => "Grand.discount.context-{0}-{1}-{2}";

        /// <summary>
        /// Key pattern to clear cache
        /// </summary>
        public static string DISCOUNTS_PATTERN_KEY => "Grand.discount.";

        #endregion

        #region Languages & localization

        /// <summary>
        /// Key for caching
        /// </summary>
        /// <remarks>
        /// {0} : language ID
        /// </remarks>
        public static string LANGUAGES_BY_ID_KEY => "Grand.language.id-{0}";

        /// <summary>
        /// Key for caching
        /// </summary>
        /// <remarks>
        /// {0} : language code
        /// </remarks>
        public static string LANGUAGES_BY_CODE => "Grand.language.code-{0}";

        /// <summary>
        /// Key for caching
        /// </summary>
        /// <remarks>
        /// {0} : show hidden records?
        /// </remarks>
        public static string LANGUAGES_ALL_KEY => "Grand.language.all-{0}";

        /// <summary>
        /// Key pattern to clear cache
        /// </summary>
        public static string LANGUAGES_PATTERN_KEY => "Grand.language.";

        /// <summary>
        /// Key for caching
        /// </summary>
        /// <remarks>
        /// {0} : language ID
        /// </remarks>
        public static string TRANSLATERESOURCES_ALL_KEY => "Grand.translate.all-{0}";

        /// <summary>
        /// Key pattern to clear cache
        /// </summary>
        public static string TRANSLATERESOURCES_PATTERN_KEY => "Grand.translate.";

        #endregion

        /// <summary>
        /// Key for caching
        /// </summary>
        /// <remarks>
        /// {0} : picture ID
        /// </remarks>
        public static string PICTURE_BY_ID => "Grand.picture-{0}";

        /// <summary>
        /// Key for caching
        /// </summary>
        /// <remarks>
        /// {0} : picture ID
        /// {1} : target size
        /// {2} : showDefaultPicture
        /// {3} : storeLocation
        /// </remarks>
        public static string PICTURE_BY_KEY => "Grand.picture-{0}-{1}-{2}-{3}";

        #region Seo

        /// <summary>
        /// Key for caching
        /// </summary>
        /// <remarks>
        /// {0} : entity ID
        /// {1} : entity name
        /// {2} : language ID
        /// </remarks>
        public static string URLEntity_ACTIVE_BY_ID_NAME_LANGUAGE_KEY => "Grand.urlEntity.active.id-name-language-{0}-{1}-{2}";

        /// <summary>
        /// Key for caching
        /// </summary>
        /// <remarks>
        /// {0} : slug
        /// </remarks>
        public static string URLEntity_BY_SLUG_KEY => "Grand.urlEntity.active.slug-{0}";

        /// <summary>
        /// Key pattern to clear cache
        /// </summary>
        public static string URLEntity_PATTERN_KEY = "Grand.urlEntity.";

        #endregion

        #region Stores

        /// <summary>
        /// Key for caching
        /// </summary>
        public static string STORES_ALL_KEY => "Grand.stores.all";

        /// <summary>
        /// Key for caching
        /// </summary>
        /// <remarks>
        /// {0} : store ID
        /// </remarks>
        public static string STORES_BY_ID_KEY => "Grand.stores.id-{0}";

        #endregion

        #region Tax

        /// <summary>
        /// Key for caching
        /// </summary>
        public static string TAXCATEGORIES_ALL_KEY => "Grand.taxcategory.all";

        /// <summary>
        /// Key for caching
        /// </summary>
        /// <remarks>
        /// {0} : tax category ID
        /// </remarks>
        public static string TAXCATEGORIES_BY_ID_KEY => "Grand.taxcategory.id-{0}";

        /// <summary>
        /// Key pattern to clear cache
        /// </summary>
        public static string TAXCATEGORIES_PATTERN_KEY => "Grand.taxcategory.";

        #endregion

        #region Pages

        /// <summary>
        /// Key for caching
        /// </summary>
        /// <remarks>
        /// {0} : store ID
        /// {1} : ignore ACL?
        /// </remarks>
        public static string PAGES_ALL_KEY => "Grand.pages.all-{0}-{1}";

        /// <summary>
        /// Key for caching
        /// </summary>
        /// <remarks>
        /// {0} : page ID
        /// </remarks>
        public static string PAGES_BY_ID_KEY => "Grand.pages.id-{0}";

        /// <summary>
        /// Key for caching
        /// </summary>
        /// <remarks>
        /// {0} : page system name
        /// {1} : store id
        /// </remarks>
        public static string PAGES_BY_SYSTEMNAME => "Grand.pages.systemname-{0}-{1}";

        /// <summary>
        /// Key pattern to clear cache
        /// </summary>
        public static string PAGES_PATTERN_KEY => "Grand.pages.";

        #endregion
    }
}
