package org.xyzh.api.study.task;

import org.xyzh.common.core.domain.ResultDomain;
import org.xyzh.common.dto.study.TbLearningTask;
import org.xyzh.common.dto.study.TbTaskUser;
import org.xyzh.common.dto.study.TbTaskCourse;
import org.xyzh.common.dto.study.TbTaskResource;

import java.util.List;

/**
 * @description 学习任务服务接口
 * @filename LearningTaskService.java
 * @author yslg
 * @copyright xyzh
 * @since 2025-10-15
 */
public interface LearningTaskService {

    /**
     * @description 获取学习任务列表
     * @param filter 过滤条件
     * @return ResultDomain<TbLearningTask> 任务列表
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbLearningTask> getTaskList(TbLearningTask filter);

    /**
     * @description 根据ID获取任务详情
     * @param taskID 任务ID
     * @return ResultDomain<TbLearningTask> 任务详情
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbLearningTask> getTaskById(String taskID);

    /**
     * @description 创建学习任务
     * @param task 任务信息
     * @return ResultDomain<TbLearningTask> 创建结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbLearningTask> createTask(TbLearningTask task);

    /**
     * @description 更新学习任务
     * @param task 任务信息
     * @return ResultDomain<TbLearningTask> 更新结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbLearningTask> updateTask(TbLearningTask task);

    /**
     * @description 删除学习任务
     * @param taskID 任务ID
     * @return ResultDomain<Boolean> 删除结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<Boolean> deleteTask(String taskID);

    /**
     * @description 更新任务状态
     * @param taskID 任务ID
     * @param status 状态
     * @return ResultDomain<TbLearningTask> 更新结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbLearningTask> updateTaskStatus(String taskID, Integer status);

    // ----------------任务用户相关--------------------------------

    /**
     * @description 获取任务用户列表
     * @param taskID 任务ID
     * @return ResultDomain<TbTaskUser> 用户列表
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbTaskUser> getTaskUsers(String taskID);

    /**
     * @description 添加任务用户
     * @param taskUser 任务用户信息
     * @return ResultDomain<TbTaskUser> 添加结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbTaskUser> addTaskUser(TbTaskUser taskUser);

    /**
     * @description 批量添加任务用户
     * @param taskID 任务ID
     * @param userIDs 用户ID列表
     * @param deptID 部门ID
     * @return ResultDomain<TbTaskUser> 添加结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbTaskUser> batchAddTaskUsers(String taskID, List<String> userIDs, String deptID);

    /**
     * @description 移除任务用户
     * @param taskID 任务ID
     * @param userID 用户ID
     * @return ResultDomain<Boolean> 移除结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<Boolean> removeTaskUser(String taskID, String userID);

    /**
     * @description 更新任务用户状态
     * @param taskID 任务ID
     * @param userID 用户ID
     * @param status 状态
     * @param progress 进度
     * @return ResultDomain<TbTaskUser> 更新结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbTaskUser> updateTaskUserStatus(String taskID, String userID, Integer status, java.math.BigDecimal progress);

    // ----------------任务课程相关--------------------------------

    /**
     * @description 获取任务课程列表
     * @param taskID 任务ID
     * @return ResultDomain<TbTaskCourse> 课程列表
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbTaskCourse> getTaskCourses(String taskID);

    /**
     * @description 添加任务课程
     * @param taskCourse 任务课程信息
     * @return ResultDomain<TbTaskCourse> 添加结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbTaskCourse> addTaskCourse(TbTaskCourse taskCourse);

    /**
     * @description 移除任务课程
     * @param taskID 任务ID
     * @param courseID 课程ID
     * @return ResultDomain<Boolean> 移除结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<Boolean> removeTaskCourse(String taskID, String courseID);

    // ----------------任务资源相关--------------------------------

    /**
     * @description 获取任务资源列表
     * @param taskID 任务ID
     * @return ResultDomain<TbTaskResource> 资源列表
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbTaskResource> getTaskResources(String taskID);

    /**
     * @description 添加任务资源
     * @param taskResource 任务资源信息
     * @return ResultDomain<TbTaskResource> 添加结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbTaskResource> addTaskResource(TbTaskResource taskResource);

    /**
     * @description 移除任务资源
     * @param taskID 任务ID
     * @param resourceID 资源ID
     * @return ResultDomain<Boolean> 移除结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<Boolean> removeTaskResource(String taskID, String resourceID);
}
