package jnpf.cultivate.v2.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import jnpf.entity.cultivate.CultivateIdentifyItems;
import jnpf.model.cultivate.v2.apply.req.*;
import jnpf.model.cultivate.v2.apply.vo.*;
import jnpf.model.cultivate.vo.identify.IdentifyApplyDetailsInfoVo;

import javax.validation.Valid;
import java.util.List;


public interface V2CultivateIdentifyApplyService {

    /**
     * 获取Web端培养鉴定申请列表的分页数据
     *
     * @param req 查询条件请求对象，包含分页信息和筛选条件
     * @return 分页结果对象，包含申请列表数据和分页信息
     */
    Page<V2IdentifyApplyListVo> getWebPageApplyList(V2IdentifyApplyListReq req);

    /**
     * 根据ID获取Web端培养鉴定申请的基本信息
     *
     * @param id 申请记录的唯一标识符
     * @return 申请的基本信息对象
     */
    V2IdentifyApplyBasicInfoVo getWebApplyBasicInfo(String id);

    /**
     * 根据ID获取Web端培养鉴定申请的详细信息
     *
     * @param id 申请记录的唯一标识符
     * @return 申请的详细信息对象
     */
    V2IdentifyApplyInfoVo getWebApplyInfo(String id);

    /**
     * 批量保存培养鉴定申请数据
     *
     * @param req 保存请求对象，包含待保存的申请数据列表
     */
    void applyDataSaveBatch(V2IdentifyApplySaveReq req);

    /**
     * 对指定ID的培养鉴定申请进行重新鉴定操作
     *
     * @param id 需要重新鉴定的申请记录唯一标识符
     */
    void applyDataReIdentify(String id);

    /**
     * 删除指定ID的培养鉴定申请记录
     *
     * @param id 需要删除的申请记录唯一标识符
     * @param delMain 是否删除主表
     */
    void applyDataDelete(String id, Integer delMain);

    /**
     * 查询当前用户的培养鉴定申请列表（移动端）
     *
     * @param req 查询条件请求对象，包含分页信息和筛选条件
     * @return 分页结果对象，包含申请列表数据和分页信息
     */
    Page<V2IdentifyApplyListAppVo> queryMyIdentifyApplyList(V2MyIdentifyApplyListAppReq req);

    Page<V2IdentifyApplyListAppVo> queryAppIdentifyApplyList(V2IdentifyApplyListAppReq req);

    V2IdentifyApplyAppBasicInfoVo getAppApplyBasicInfo(String id);

    V2IdentifyApplyItemVo itemList(String id);

    void applyDataSubmit(V2IdentifyApplySubmitReq req);

    /**
     * 根据鉴定记录ID重新生成鉴定（保持创建时间和鉴定人不变）
     *
     * @param id 需要重新生成的鉴定申请记录唯一标识符
     */
    List<IdentifyApplyDetailsInfoVo> regenerateIdentifyApply(String id);

    /**
     * 重新提交鉴定记录
     * @param req 参数
     */
    void reSubmit(V2IdentifyApplySubmitReq req);
}

