package com.common.service;


import com.common.entity.AnalysisAnalysisRule;
import com.common.entity.AnalysisGroupByWindow;

import java.time.LocalDateTime;

/**
 * 规则执行时间管理服务
 * 根据窗口类型（滚动、滑动、会话）动态计算下次执行时间
 */
public interface RuleExecutionTimeService {

    /**
     * 获取规则下次执行时间
     *
     * @param ruleId 规则ID
     * @return 下次执行时间，如果未初始化则返回null
     */
    LocalDateTime getNextExecuteTime(String ruleId);

    /**
     * 更新规则下次执行时间
     * 根据窗口类型（滚动、滑动、会话）动态计算
     *
     * @param rule 分析规则
     * @param groupByWindow 窗口配置
     */
    void updateNextExecuteTime(AnalysisAnalysisRule rule, AnalysisGroupByWindow groupByWindow);

    /**
     * 初始化规则执行时间
     * 应用启动时调用，设置初始执行时间
     *
     * @param rule 分析规则
     * @param groupByWindow 窗口配置
     */
    void initRuleExecuteTime(AnalysisAnalysisRule rule, AnalysisGroupByWindow groupByWindow);

    /**
     * 删除规则执行时间
     *
     * @param ruleId 规则ID
     */
    void removeRuleExecuteTime(String ruleId);

    /**
     * 清空所有规则执行时间
     */
    void clearAllRuleExecuteTime();
}
