package jnpf.cultivate.service;

import com.baomidou.mybatisplus.extension.service.IService;
import jnpf.base.Pagination;
import jnpf.base.vo.PageListVO;
import jnpf.model.cultivate.CultivatePage;
import jnpf.model.cultivate.dto.certificate.FtbCertificateOrgWisdomStatisticDTO;
import jnpf.model.cultivate.dto.certificate.FtbCertificatePersonWisdomStatisticDTO;
import jnpf.model.cultivate.po.certificate.FtbCertificateEntity;
import jnpf.model.cultivate.v2.common.vo.V2BaseIdNameVo;
import jnpf.model.cultivate.vo.certificate.FtbCertificateListVO;
import jnpf.model.cultivate.vo.certificate.FtbCertificateOrgWisdomStatisticVO;
import jnpf.model.cultivate.vo.certificate.FtbCertificatePersonWisdomStatisticVO;

import java.util.List;

/**
 * 证书模版表
 * @author penghao
 */
public interface FtbCultivateCertificateService extends IService<FtbCertificateEntity>{

    /**
     * 获取证书列表
     * @param pagination 分页信息，用于控制返回列表的页数和大小
     * @return 返回一个证书实体列表
     */
    List<FtbCertificateEntity> getList(Pagination pagination);

    /**
     * 根据ID获取证书信息
     * @param id 证书的唯一标识符
     * @return 返回一个包含指定ID的证书信息的实体
     */
    FtbCertificateEntity getInfo(String id);

    /**
     * 创建新的证书
     * @param entity 要创建的证书的实体对象
     */
    void create(FtbCertificateEntity entity);

    /**
     * 更新证书信息
     * @param id 要更新的证书的唯一标识符
     * @param entity 包含更新后证书信息的实体对象
     * @return 返回一个表示更新结果的字符串，具体含义取决于实现
     */
    String updateEntity(String id, FtbCertificateEntity entity);

    /**
     * 删除证书
     * @param info 要删除的证书的信息实体
     */
    void delete(FtbCertificateEntity info);

    /**
     * 组织列表统计
     * @param statisticDTO 统计参数对象，包含需要进行统计的条件和范围
     * @return 返回一个分页视图对象，包含组织智慧统计信息
     */
    PageListVO<FtbCertificateOrgWisdomStatisticVO> organizationListStatistics(FtbCertificateOrgWisdomStatisticDTO statisticDTO);

    /**
     * 个人维度统计
     * @param personWisdomStatisticDTO 统计参数对象，包含个人智慧统计的条件和范围
     * @return 返回一个分页视图对象，包含个人智慧统计信息
     */
    PageListVO<FtbCertificatePersonWisdomStatisticVO> personalDimensionStatistics(FtbCertificatePersonWisdomStatisticDTO personWisdomStatisticDTO);

    /**
     * 删除指定的证书
     * @param id 要删除的证书的唯一标识符
     */
    void deleteCertificate(String id);

    /**
     * 根据未选择的关键词查询证书列表
     * @param keyWords 关键词，用于过滤证书列表
     * @param page 分页信息，用于控制返回结果的页数和大小
     * @return 返回一个分页视图对象，包含根据关键词过滤后的证书列表
     */
    PageListVO<FtbCertificateListVO> queryCertificateListByNotChoose(String keyWords, CultivatePage page);

    /**
     * 获取证书选项下拉数据
     * @return 获取证书选项列表
     */
    List<V2BaseIdNameVo> getOption();
}
