package cn.iocoder.byzs.module.bjdx.service.questionnaire;

import cn.iocoder.byzs.framework.common.pojo.PageResult;
import cn.iocoder.byzs.module.bjdx.controller.admin.questionnaire.vo.ConfigQuestionRespVO;
import cn.iocoder.byzs.module.bjdx.controller.admin.questionnaire.vo.QuestionnairePageReqVO;
import cn.iocoder.byzs.module.bjdx.controller.admin.questionnaire.vo.QuestionnaireSaveReqVO;
import cn.iocoder.byzs.module.bjdx.dal.dataobject.questionnaire.QuestionnaireDO;
import jakarta.validation.Valid;

import java.util.List;

/**
 * 问卷 Service 接口
 *
 * @author lyb
 */
public interface QuestionnaireService {

    /**
     * 创建问卷
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createQuestionnaire(@Valid QuestionnaireSaveReqVO createReqVO);

    /**
     * 更新问卷
     *
     * @param updateReqVO 更新信息
     */
    void updateQuestionnaire(@Valid QuestionnaireSaveReqVO updateReqVO);

    /**
     * 删除问卷
     *
     * @param id 编号
     */
    void deleteQuestionnaire(Long id);

    /**
    * 批量删除问卷
    *
    * @param ids 编号
    */
    void deleteQuestionnaireListByIds(List<Long> ids);

    /**
     * 获得问卷
     *
     * @param id 编号
     * @return 问卷
     */
    QuestionnaireDO getQuestionnaire(Long id);

    /**
     * 获得问卷分页
     *
     * @param pageReqVO 分页查询
     * @return 问卷分页
     */
    PageResult<QuestionnaireDO> getQuestionnairePage(QuestionnairePageReqVO pageReqVO);

    /**
     * 获得问卷配置
     *
     * @param configQuestionRespVO 分页查询
     * @return 问卷分页
     */
    PageResult<ConfigQuestionRespVO> getConfigQuestPage(ConfigQuestionRespVO configQuestionRespVO);

    /**
     * 获得问卷配置
     *
     * @param configQuestionRespVO 分页查询
     * @return 问卷分页
     */
    PageResult<ConfigQuestionRespVO> getConfigQuestNoPage(ConfigQuestionRespVO configQuestionRespVO);

    /**
     * 添加问卷试题配置
     *
     * @param configQuestionRespVO 编号
     */
    void addConfigQuest(ConfigQuestionRespVO configQuestionRespVO);

    /**
     * 删除问卷试题配置
     *
     * @param configQuestionRespVO 编号
     */
    void delConfigQuest(ConfigQuestionRespVO configQuestionRespVO);

}