using Lada.Framework.Data.Domains;

namespace ladaexpress.vn.Infrastructures.Services
{
    /// <summary>
    /// Interface cho service quản lý cấu hình ứng dụng ladaexpress.vn
    /// </summary>
    public interface IAppConfigService
    {
        /// <summary>
        /// Lấy giá trị cấu hình theo key
        /// </summary>
        /// <param name="key">Key cấu hình</param>
        /// <returns>Giá trị cấu hình</returns>
        Task<string> GetConfigValueAsync(string key);

        /// <summary>
        /// Lấy giá trị cấu hình theo key với giá trị mặc định
        /// </summary>
        /// <param name="key">Key cấu hình</param>
        /// <param name="defaultValue">Giá trị mặc định nếu không tìm thấy</param>
        /// <returns>Giá trị cấu hình hoặc giá trị mặc định</returns>
        Task<string> GetConfigValueAsync(string key, string defaultValue);

        /// <summary>
        /// Load tất cả configs vào cache
        /// </summary>
        /// <returns></returns>
        Task LoadConfigsToCacheAsync();

        /// <summary>
        /// Reload config cache
        /// </summary>
        /// <returns></returns>
        Task ReloadConfigCacheAsync();

        /// <summary>
        /// Invalidate cache cho một key cụ thể
        /// </summary>
        /// <param name="key">Key cần xóa cache</param>
        void InvalidateCache(string key);

        /// <summary>
        /// Lấy tất cả configs
        /// </summary>
        /// <returns>Danh sách AppConfig</returns>
        Task<List<AppConfig>> GetAllConfigsAsync();
    }
}