package com.example.demo.controller;

import com.example.demo.model.StatisticsResult;
import com.example.demo.service.StatisticsService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.*;

import java.util.Map;

/**
 * 数据统计分析控制器。
 * 提供数据汇总、图表展示、自定义查询、报表导出和数据台账生成等 RESTful API 接口。
 */
@RestController
@RequestMapping("/api/statistics")
@Tag(name = "数据统计分析", description = "数据汇总、图表、自定义查询、报表导出、台账生成接口")
public class StatisticsController {

    private final StatisticsService statisticsService;

    public StatisticsController(StatisticsService statisticsService) {
        this.statisticsService = statisticsService;
    }

    /**
     * 数据汇总。
     *
     * @requirement(name="数据汇总", id="SRS-IMS_F-018")
     *
     * @return 汇总统计结果
     */
    @GetMapping("/summary")
    @Operation(summary = "数据汇总", description = "获取系统整体业务数据汇总统计")
    public StatisticsResult summarizeData() {
        return statisticsService.summarizeData();
    }

    /**
     * 获取图表展示数据。
     *
     * @requirement(name="图表展示", id="SRS-IMS_F-019")
     *
     * @param chartType 图表类型（bar/line/pie，可选）
     * @return 图表数据
     */
    @GetMapping("/chart")
    @Operation(summary = "图表数据", description = "获取图表展示所需的数据")
    public StatisticsResult getChartData(
            @Parameter(description = "图表类型(bar/line/pie)") @RequestParam(required = false) String chartType) {
        return statisticsService.getChartData(chartType);
    }

    /**
     * 自定义查询。
     *
     * @requirement(name="自定义查询", id="SRS-IMS_F-020")
     *
     * @param queryParams 自定义查询参数
     * @return 查询结果
     */
    @PostMapping("/custom-query")
    @Operation(summary = "自定义查询", description = "基于自定义条件进行数据查询")
    public StatisticsResult customQuery(@RequestBody Map<String, Object> queryParams) {
        return statisticsService.customQuery(queryParams);
    }

    /**
     * 报表导出。
     *
     * @requirement(name="报表导出", id="SRS-IMS_F-021")
     *
     * @param reportType 报表类型
     * @param format     导出格式（excel/pdf，可选）
     * @return 导出报表信息
     */
    @GetMapping("/export")
    @Operation(summary = "报表导出", description = "导出Excel/PDF格式报表")
    public StatisticsResult exportReport(
            @Parameter(description = "报表类型") @RequestParam String reportType,
            @Parameter(description = "导出格式(excel/pdf)") @RequestParam(required = false) String format) {
        return statisticsService.exportReport(reportType, format);
    }

    /**
     * 数据台账生成。
     *
     * @requirement(name="数据台账生成", id="SRS-IMS_F-022")
     *
     * @param ledgerType 台账类型（可选）
     * @return 台账文档信息
     */
    @GetMapping("/ledger")
    @Operation(summary = "数据台账生成", description = "生成数据台账文档")
    public StatisticsResult generateLedger(
            @Parameter(description = "台账类型") @RequestParam(required = false) String ledgerType) {
        return statisticsService.generateLedger(ledgerType);
    }
}
