package com.zhaohaoting.framework.mvchelper.task;

/**
 * Task的缓存配置
 *
 * @param <DATA>
 */
public interface ICacheConfig<DATA> {
    /**
     *
     * task的id,用于唯一标识task，相同的taskKey的task被执行会合并成同一个task执行,先执行的那个task运行，后面的task添加ICallback到task上进行回调
     *
     * @param taskOrDataSource
     * @return
     */
    String getTaskKey(Object taskOrDataSource);

    /**
     * 是否有用的缓存的数据
     * 如果返回true，则task就不会被执行，直接返回缓存的data数据给ICallback,并调用onPostExecute Code.Success
     * 如果返回false,执行task
     *
     * @param taskOrDataSource ITask，IDataSource，IAsyncTask，IDataSource，IAsyncDataSource 这四种类型
     * @param requestTime 请求的时间戳
     * @param saveTime 保存data请求的时间戳
     * @param data 缓存数据
     * @return
     */
    boolean isUsefulCacheData(Object taskOrDataSource, long requestTime, long saveTime, DATA data);

    /**
     * 是否将这个data保存下来
     * 返回true的话，ICacheStore.saveCache 就会被调用
     * 返回false的话，不保存
     *
     * @param taskOrDataSource ITask，IDataSource，IAsyncTask，IDataSource，IAsyncDataSource 这四种类型
     * @param requestTime      请求的时间戳
     * @param saveTime         保存data请求的时间戳
     * @param data             缓存数据
     * @return
     */
    boolean isNeedSave(Object taskOrDataSource, long requestTime, long saveTime, DATA data);

}
