package com.njcn.gather.report.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.njcn.gather.report.pojo.DevReportParam;
import com.njcn.gather.report.pojo.param.ReportParam;
import com.njcn.gather.report.pojo.po.PqReport;
import com.njcn.gather.report.pojo.vo.PqReportVO;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * @author makejava
 * @date 2025-03-19
 */
public interface IPqReportService extends IService<PqReport> {
    /**
     * 分页查询报告列表
     *
     * @param queryParam
     * @return
     */
    Page<PqReportVO> list(ReportParam.QueryParam queryParam);

    /**
     * 根据id查询报告详情
     *
     * @param id
     * @return
     */
    PqReportVO getByReportId(String id);

    /**
     * 新增报告
     *
     * @param reportParam
     * @return
     */
    boolean add(ReportParam reportParam);

    /**
     * 修改报告
     *
     * @param reportParam
     * @return
     */
    boolean update(ReportParam.UpdateParam reportParam);

    /**
     * 批量删除报告
     *
     * @param ids
     * @return
     */
    boolean delete(List<String> ids);

    List<PqReportVO.OptionVO> listOptions(String pattern);

    void generateReport(DevReportParam devReportParam);

    void downloadReport(DevReportParam devReportParam, HttpServletResponse response);

    /**
     * 设备归档操作
     *
     * @param id 设备id
     * @return 归档成功返回true，否则返回false
     */
    boolean documented(List<String> id);

    /**
     * 批量上传检测报告到云端
     *
     * @param deviceIds 被检设备ID列表，为空时上传所有已生成报告的设备
     */
    void uploadReportToCloud(List<String> deviceIds);
}
