package com.ruoyi.analytics.service;

import java.util.Date;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletResponse;

import com.ruoyi.analytics.domain.DashboardWidget;
import com.ruoyi.analytics.domain.ReportConfig;
import com.ruoyi.analytics.domain.ReportInstance;
import com.ruoyi.analytics.dto.FinancialReportData;

/**
 * 报表分析服务接口
 * 
 * 提供财务报表生成、数据分析、风险评估等功能
 * 
 * @author ruoyi
 * @date 2025-12-19
 */
public interface IReportAnalyzerService
{
    /**
     * 生成财务报表
     * 
     * @param reportType 报表类型 (CREDIT_SUMMARY, REVENUE_ANALYSIS, RISK_ASSESSMENT, TREND_ANALYSIS)
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @param parameters 报表参数
     * @return 报表实例ID
     */
    String generateFinancialReport(String reportType, Date startDate, Date endDate, Map<String, Object> parameters);

    /**
     * 获取财务报表数据
     * 
     * @param reportType 报表类型
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @param parameters 查询参数
     * @return 财务报表数据
     */
    FinancialReportData getFinancialReportData(String reportType, Date startDate, Date endDate, Map<String, Object> parameters);

    /**
     * 导出报表
     * 
     * @param reportId 报表ID
     * @param format 导出格式 (excel, pdf, word)
     * @param response HTTP响应
     */
    void exportReport(String reportId, String format, HttpServletResponse response);

    /**
     * 生成债权统计报表
     * 
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @param groupBy 分组方式 (status, company, month)
     * @return 统计数据
     */
    Map<String, Object> generateCreditStatistics(Date startDate, Date endDate, String groupBy);

    /**
     * 生成收益分析报表
     * 
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @param analysisType 分析类型 (profit, cost, revenue)
     * @return 收益分析数据
     */
    Map<String, Object> generateRevenueAnalysis(Date startDate, Date endDate, String analysisType);

    /**
     * 执行风险评估
     * 
     * @param assessmentType 评估类型 (credit, liquidity, market, overall)
     * @param parameters 评估参数
     * @return 风险评估结果
     */
    Map<String, Object> performRiskAssessment(String assessmentType, Map<String, Object> parameters);

    /**
     * 生成趋势预测
     * 
     * @param metric 指标名称
     * @param historicalData 历史数据
     * @param algorithm 预测算法 (linear, polynomial, exponential)
     * @return 趋势预测结果
     */
    Map<String, Object> generateTrendPrediction(String metric, List<Map<String, Object>> historicalData, String algorithm);

    /**
     * 创建自定义仪表板
     * 
     * @param userId 用户ID
     * @param dashboardName 仪表板名称
     * @param widgets 组件配置列表
     * @return 仪表板ID
     */
    String createCustomDashboard(Long userId, String dashboardName, List<DashboardWidget> widgets);

    /**
     * 获取仪表板数据
     * 
     * @param dashboardId 仪表板ID
     * @param userId 用户ID
     * @return 仪表板数据
     */
    Map<String, Object> getDashboardData(String dashboardId, Long userId);

    /**
     * 定时生成报表
     * 
     * @param reportConfig 报表配置
     * @return 生成结果
     */
    boolean scheduleReportGeneration(ReportConfig reportConfig);

    /**
     * 聚合统计数据
     * 
     * @param dataSource 数据源
     * @param groupBy 分组字段
     * @param aggregateFields 聚合字段
     * @param filters 过滤条件
     * @return 聚合结果
     */
    Map<String, Object> aggregateStatistics(String dataSource, String groupBy, List<String> aggregateFields, Map<String, Object> filters);

    /**
     * 计算业务指标
     * 
     * @param metricType 指标类型 (kpi, performance, efficiency)
     * @param timeRange 时间范围
     * @param parameters 计算参数
     * @return 指标计算结果
     */
    Map<String, Object> calculateMetrics(String metricType, String timeRange, Map<String, Object> parameters);

    /**
     * 获取报表实例
     * 
     * @param reportId 报表ID
     * @return 报表实例
     */
    ReportInstance getReportInstance(String reportId);

    /**
     * 获取报表列表
     * 
     * @param userId 用户ID
     * @param reportType 报表类型
     * @param status 状态
     * @return 报表列表
     */
    List<ReportInstance> getReportList(Long userId, String reportType, String status);

    /**
     * 删除报表
     * 
     * @param reportId 报表ID
     * @return 删除结果
     */
    boolean deleteReport(String reportId);

    /**
     * 获取数据可视化配置
     * 
     * @param chartType 图表类型 (line, bar, pie, scatter)
     * @param dataSource 数据源
     * @param parameters 参数
     * @return 可视化配置
     */
    Map<String, Object> getVisualizationConfig(String chartType, String dataSource, Map<String, Object> parameters);

    /**
     * 生成智能分析报告
     * 
     * @param analysisType 分析类型 (anomaly, pattern, correlation)
     * @param dataRange 数据范围
     * @param parameters 分析参数
     * @return 智能分析结果
     */
    Map<String, Object> generateIntelligentAnalysis(String analysisType, String dataRange, Map<String, Object> parameters);
}