package com.cf.imes.module.report.service.template;

import com.bstek.designer.bean.ReportDefinitionWrapper;
import com.bstek.ureport.export.html.HtmlReport;
import com.cf.imes.module.report.controller.admin.template.vo.ReportTemplateCommonPreviewReqVO;
import com.cf.imes.module.report.controller.admin.template.vo.ReportTemplatePreviewReqVO;
import com.cf.imes.module.report.controller.admin.template.vo.ReportTemplateReqVO;
import com.cf.imes.module.report.controller.admin.template.vo.ReportTemplateRespVO;
import com.cf.imes.module.report.controller.admin.template.vo.ReportTemplateSaveReqVO;
import com.cf.imes.module.report.dal.dataobject.template.ReportTemplateDO;
import org.springframework.web.multipart.MultipartFile;

import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.Valid;
import java.util.List;

/**
 * 报表模板信息 Service 接口
 *
 * @author Gqr
 * @since 2024/7/3 11:56
 */
public interface ReportTemplateService {
    /**
     * 创建报表模板
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    ReportTemplateRespVO createReportTemplate(@Valid ReportTemplateSaveReqVO createReqVO);

    /**
     * 复制报表模版
     *
     * @param createReqVO
     * @return
     */
    Long copyReportTemplate(@Valid ReportTemplateSaveReqVO createReqVO);

    /**
     * 更新报表模板
     *
     * @param updateReqVO 更新信息
     */
    ReportTemplateRespVO updateReportTemplate(@Valid ReportTemplateSaveReqVO updateReqVO);

    /**
     * 删除报表模板
     *
     * @param id 编号
     */
    void deleteReportTemplate(Long id, Long targetOrganId);

    /**
     * 获取模板定义信息（xml+数据源）
     *
     * @param id
     * @return
     */
    ReportDefinitionWrapper getReportTemplateDefinition(Long id, Long targetOrganId);

    /**
     * 获取报表模板信息列表
     *
     * @param pageReqVO 查询参数
     * @return 报表模板信息列表
     */
    List<ReportTemplateDO> getReportTemplateList(ReportTemplateReqVO pageReqVO);

    /**
     * 模板预览
     *
     * @param reqVO
     * @return
     */
    HtmlReport preview(ReportTemplatePreviewReqVO reqVO);


    /**
     * 模板通用预览
     * 通过模板id+query参数获取预览界面
     *
     * @param reqVO
     * @return
     */
    HtmlReport commonPreview(ReportTemplateCommonPreviewReqVO reqVO);

    /**
     * 模版预览打印
     */
    void print(ReportTemplatePreviewReqVO reqVO, HttpServletResponse response);

    /**
     * 模版通用预览打印
     * 通过模板id+query参数获取打印内容
     */
    void commonPrint(ReportTemplateCommonPreviewReqVO reqVO, HttpServletResponse response);

    /**
     * 模版预览下载
     *
     * @param type     文件类型
     * @param reqVO
     * @param response
     */
    void download(String type, ReportTemplatePreviewReqVO reqVO, HttpServletResponse response);

    /**
     * 模版通用预览下载
     * 通过模板id+query参数获取文件
     *
     * @param type     文件类型
     * @param reqVO
     * @param response
     */
    void commonDownload(String type, ReportTemplateCommonPreviewReqVO reqVO, HttpServletResponse response);

    /**
     * 模板导出
     *
     * @param templateId
     * @param response
     */
    void exportTemplate(Long templateId, HttpServletResponse response);

    /**
     * 模版导入
     *
     * @param name
     * @param file
     */
    void importTemplate(String name, Long organId, MultipartFile file);
}
