package jnpf.cultivate.v2.service;

import com.baomidou.mybatisplus.extension.service.IService;
import jnpf.entity.cultivate.CultivateIdentifyApply;
import jnpf.model.cultivate.po.exam.FtbCultivateExamUser;
import jnpf.model.cultivate.po.task.FtbCultivateTaskLog;

import java.util.List;


public interface FtbCultivateTaskLogService extends IService<FtbCultivateTaskLog> {


    /**
     * 根据任务ID、用户ID和阶段ID查询任务日志
     *
     * @param taskId  任务ID
     * @param userId  用户ID
     * @param phaseId 阶段ID
     * @return 任务日志
     */
    FtbCultivateTaskLog getByTaskIdAndUserIdAndPhaseId(String taskId, String userId, String phaseId);


    /**
     * 获取任务日志
     *
     * @param taskId 任务ID
     * @param userId 用户ID
     * @return 任务日志列表
     */
    List<FtbCultivateTaskLog> queryCompleteTaskPhase(String taskId, String userId);

    /**
     * 保存任务日志
     *
     * @param userId  用户ID
     * @param taskId  任务ID
     * @param phaseId 阶段ID
     */
    void saveOrUpdateByCondition(String userId, String taskId, String phaseId, Integer issuedCertificate);

    /**
     * 获取任务日志
     *
     * @param taskIds 任务ID
     * @param userId  用户ID
     * @return 任务日志列表
     */
    List<FtbCultivateTaskLog> batchQueryCompleteTaskPhase(List<String> taskIds, String userId);

    /**
     * 保存课程任务阶段状态
     *
     * @param userId  用户 ID
     * @param taskId  任务 ID
     * @param phaseId 阶段 ID
     * @param state   状态（-1-未配置 0-未完成 1-已完成）
     */
    void saveCourseTaskPhase(String userId, String taskId, String phaseId, Integer state);

    /**
     * 保存考试任务阶段状态
     *
     * @param userId  用户 ID
     * @param taskId  任务 ID
     * @param phaseId 阶段 ID
     * @param state   状态（-1-未配置 0-未完成 1-已完成）
     */
    void saveExamTaskPhase(String userId, String taskId, String phaseId, Integer state, FtbCultivateExamUser examUser);

    /**
     * 保存练习任务阶段状态
     *
     * @param userId  用户 ID
     * @param taskId  任务 ID
     * @param phaseId 阶段 ID
     * @param state   状态（-1-未配置 0-未完成 1-已完成）
     */
    void savePracticeTaskPhase(String userId, String taskId, String phaseId, Integer state);

    /**
     * 保存鉴定任务阶段状态
     *
     * @param userId  用户 ID
     * @param taskId  任务 ID
     * @param phaseId 阶段 ID
     * @param state   状态（-1-未配置 0-未完成 1-已完成）
     */
    void saveIdentificationTaskPhase(String userId, String taskId, String phaseId, Integer state, CultivateIdentifyApply cultivateIdentifyApply);

    /**
     * 保存考试结果状态
     *
     * @param userId     用户 ID
     * @param taskId     任务 ID
     * @param phaseId    阶段 ID
     * @param examResult 考试结果状态（-1-未配置 0-待考试 1-待批阅 2-已逾期 3-合格 4-不合格 5-优秀）
     */
    void saveExamResultState(String userId, String taskId, String phaseId, Integer examResult);

    /**
     * 保存鉴定结果状态
     *
     * @param userId         用户 ID
     * @param taskId         任务 ID
     * @param phaseId        阶段 ID
     * @param identifyResult 鉴定结果状态（-1-未配置 0-合格 1-优秀 2-不合格）
     */
    void saveIdentifyResultState(String userId, String taskId, String phaseId, Integer identifyResult);

    /**
     * 保存用户考试ID
     *
     * @param userId     用户 ID
     * @param taskId     任务 ID
     * @param phaseId    阶段 ID
     * @param userExamId 用户考试ID
     */
    void saveUserExamId(String userId, String taskId, String phaseId, String userExamId);

    /**
     * 保存用户鉴定ID
     *
     * @param userId         用户 ID
     * @param taskId         任务 ID
     * @param phaseId        阶段 ID
     * @param userIdentifyId 用户鉴定ID
     */
    void saveUserIdentifyId(String userId, String taskId, String phaseId, String userIdentifyId);

    void checkAndSetTaskPhaseStart(String userId, String taskId, String phaseId);

    List<FtbCultivateTaskLog> queryTaskPhaseLogs(String userId, String taskId, String phaseId);
}