package jnpf.cultivate.v2.controller.web.course;

import jnpf.base.ActionResult;
import jnpf.base.vo.PageListVO;
import jnpf.cultivate.service.FtbCultivateCourseStatisticesService;
import jnpf.model.cultivate.dto.course.FtbCultivateCourseOrgStatisticsDTO;
import jnpf.model.cultivate.dto.course.FtbCultivateCoursePersonStatisticesDTO;
import jnpf.model.cultivate.vo.course.web.FtbCultivateCourseOrgStatisticesVO;
import jnpf.model.cultivate.vo.course.web.FtbCultivateCoursePersonStatisticesVO;
import jnpf.util.EasyExcelUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * web培训数据看板 -课程统计
 *
 * @author xgl
 */
@RestController
@RequestMapping("/v2/web/course/statistics")
public class V2CultivateCourseStatisticesController {

    @Autowired
    private FtbCultivateCourseStatisticesService ftbCultivateCourseStatisticesService;
    /**
     * 组织维度统计
     * <p>
     * 根据传入的统计参数，查询并返回组织维度的统计数据。
     *
     * @param statisticDTO 统计参数，包含查询条件和分页信息
     * @return 返回组织维度统计结果的分页列表视图对象
     */
    @PostMapping("/org-list-statistics")
    public ActionResult<PageListVO<FtbCultivateCourseOrgStatisticesVO>> organizationListStatistics(
            @RequestBody FtbCultivateCourseOrgStatisticsDTO statisticDTO) {
        return ActionResult.success(ftbCultivateCourseStatisticesService.organizationListStatistics(statisticDTO));
    }

    /**
     * 组织维度统计-导出
     * <p>
     * 根据传入的统计参数，查询组织维度统计数据，并将结果导出为Excel文件。
     *
     * @param statisticDTO 统计参数，包含查询条件
     * @param response     HTTP响应对象，用于输出Excel文件
     * @throws IOException 导出过程中可能抛出IO异常
     */
    @PostMapping("/org-list-statistics/export")
    public void organizationListStatisticsExport(@RequestBody FtbCultivateCourseOrgStatisticsDTO statisticDTO, HttpServletResponse response) throws IOException {
        statisticDTO.setPageSize(99999);
        PageListVO<FtbCultivateCourseOrgStatisticesVO> listVO = ftbCultivateCourseStatisticesService.organizationListStatistics(statisticDTO);
        EasyExcelUtil.simpleWrite(listVO.getList(), "组织维度统计", FtbCultivateCourseOrgStatisticesVO.class, response);
    }

    /**
     * 个人维度统计
     * <p>
     * 根据传入的统计参数，查询并返回个人维度的统计数据。
     *
     * @param req 统计参数，包含查询条件和分页信息
     * @return 返回个人维度统计结果的分页列表视图对象
     */
    @PostMapping("/person-list-statistics")
    public ActionResult<PageListVO<FtbCultivateCoursePersonStatisticesVO>> personListStatistics(
            @RequestBody FtbCultivateCoursePersonStatisticesDTO req) {
        return ActionResult.success(ftbCultivateCourseStatisticesService.personListStatistics(req));
    }

    /**
     * 个人维度统计导出信息
     * <p>
     * 根据传入的统计参数，查询个人维度统计数据，并将结果导出为Excel文件。
     *
     * @param req      统计参数，包含查询条件
     * @param response HTTP响应对象，用于输出Excel文件
     * @throws IOException 导出过程中可能抛出IO异常
     */
    @PostMapping("/person-list-statistics/export")
    public void personListStatisticsExport(@RequestBody FtbCultivateCoursePersonStatisticesDTO req, HttpServletResponse response) throws IOException {
        PageListVO<FtbCultivateCoursePersonStatisticesVO> listVO = ftbCultivateCourseStatisticesService.personListStatistics(req);
        EasyExcelUtil.simpleWrite(listVO.getList(), "个人维度统计", FtbCultivateCoursePersonStatisticesVO.class, response);
    }


}
