package com.common.service;



import com.common.entity.*;
import java.util.List;

/**
 * SQL生成服务接口
 */
public interface SqlGeneratorService {

    /**
     * 根据规则动态生成SQL
     *
     * @param rule        分析规则
     * @param fields      字段配置
     * @param whereConditions WHERE条件逻辑组
     * @param filters      过滤条件列表
     * @param groupByColumns GROUP BY字段
     * @param havingConditions HAVING条件列表
     * @param groupByWindow   时间窗口配置
     * @param startTime   开始时间
     * @param endTime     结束时间
     * @return 生成的SQL语句
     */
    String generateSql(AnalysisAnalysisRule rule,
                       List<AnalysisField> fields,
                       List<AnalysisWhereCondition> whereConditions,
                       List<AnalysisFilter> filters,
                       List<AnalysisGroupByColumn> groupByColumns,
                       List<AnalysisGroupByHaving> havingConditions,
                       AnalysisGroupByWindow groupByWindow,
                       String startTime,
                       String endTime);

    /**
     * 生成SELECT子句
     *
     * @param fields 字段配置
     * @param groupByWindow 时间窗口配置
     * @return SELECT子句SQL
     */
    String generateSelectClause(List<AnalysisField> fields, AnalysisGroupByWindow groupByWindow);

    /**
     * 生成FROM子句
     *
     * @param fields 字段配置
     * @param groupByWindow 时间窗口配置
     * @return FROM子句SQL
     */
    String generateFromClause(List<AnalysisField> fields, AnalysisGroupByWindow groupByWindow);

    /**
     * 生成WHERE子句（新版本，使用AnalysisFilter）
     *
     * @param filters    过滤条件列表
     * @param startTime  开始时间
     * @param endTime    结束时间
     * @return WHERE子句SQL
     */
    String generateWhereClauseFromFilters(List<AnalysisFilter> filters,
                                          String startTime,
                                          String endTime);

    /**
     * 生成WHERE子句（旧版本，使用AnalysisWhereCondition）
     *
     * @param conditions WHERE条件列表
     * @param startTime  开始时间
     * @param endTime    结束时间
     * @return WHERE子句SQL
     * @deprecated 使用 generateWhereClauseFromFilters 替代
     */
    @Deprecated
    String generateWhereClause(List<AnalysisWhereCondition> conditions,
                               String startTime,
                               String endTime);

    /**
     * 生成GROUP BY子句
     *
     * @param columns GROUP BY字段列表
     * @param groupByWindow 时间窗口配置
     * @return GROUP BY子句SQL
     */
    String generateGroupByClause(List<AnalysisGroupByColumn> columns, AnalysisGroupByWindow groupByWindow);

    /**
     * 生成HAVING子句（新版本，使用AnalysisGroupByHaving）
     *
     * @param havingConditions HAVING条件列表
     * @return HAVING子句SQL
     */
    String generateHavingClauseFromConditions(List<AnalysisGroupByHaving> havingConditions);

    /**
     * 生成HAVING子句（旧版本，从规则表达式获取）
     *
     * @param rule   规则
     * @return HAVING子句SQL
     * @deprecated 使用 generateHavingClauseFromConditions 替代
     */
    @Deprecated
    String generateHavingClause(AnalysisAnalysisRule rule);

    /**
     * 生成时间窗口SQL子句
     *
     * @param groupByWindow 时间窗口配置
     * @return 窗口SQL子句
     */
    String generateWindowClause(AnalysisGroupByWindow groupByWindow);

    /**
     * 构建完整的SQL语句
     *
     * @param selectClause  SELECT子句
     * @param fromClause    FROM子句
     * @param whereClause   WHERE子句
     * @param groupByClause GROUP BY子句
     * @param havingClause  HAVING子句
     * @return 完整SQL
     */
    String buildFullSql(String selectClause,
                        String fromClause,
                        String whereClause,
                        String groupByClause,
                        String havingClause);
}

