using HealthMonitor.Util.Models;

namespace HealthMonitor.Core.Cache
{
    public interface IDurableEntityManager
    {
        /// <summary>
        /// 判断实体类型是否支持持久化到缓存,若支持则返回缓存操作对象
        /// </summary>
        /// <param name="entityType"></param>
        /// <returns></returns>
        IEntityCacheHandler? GetCacheHandler(Type entityType);

        /// <summary>
        /// 获取缓存键
        /// </summary>
        /// <param name="entityType">实体类型</param>
        /// <param name="id"></param>
        /// <returns></returns>
        string CalcCacheKey(Type entityType, string id);

        /// <summary>
        /// 获取缓存键
        /// </summary>
        /// <param name="entityType">实体类型</param>
        /// <param name="conditions">查询条件</param>
        /// <returns></returns>
        string CalcCacheKey(Type entityType, GeneralParam conditions);

        /// <summary>
        /// 获取缓存键(历史表)
        /// </summary>
        /// <param name="entityType">实体类型</param>
        /// <param name="id"></param>
        /// <param name="imei">设备serialno</param>
        /// <param name="date">查询的历史日期</param>
        /// <returns></returns>
        string CalcHistoryCacheKey(Type entityType, string id, string imei, DateTime? date = null);

        /// <summary>
        /// 获取缓存键(历史表)
        /// </summary>
        /// <param name="entityType">实体类型</param>
        /// <param name="conditions">查询条件</param>
        /// <param name="imei">设备serialno</param>
        /// <param name="date">查询的历史日期</param>
        /// <returns></returns>
        string CalcHistoryCacheKey(Type entityType, GeneralParam conditions, string imei, DateTime? date = null);

        /// <summary>
        /// 清理所有缓存实体的失效(超时)映射关系
        /// </summary>
        void CleanUpEntitiesMapper();
    }
}