package com.lesingle.edu.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.lesingle.edu.common.response.PageResult;
import com.lesingle.edu.dto.request.TaskCreateRequest;
import com.lesingle.edu.dto.request.TaskSubmitRequest;
import com.lesingle.edu.dto.request.TaskUpdateRequest;
import com.lesingle.edu.dto.response.TaskCompletionDetailResponse;
import com.lesingle.edu.dto.response.TaskResponse;
import com.lesingle.edu.dto.response.TaskWithCompletionResponse;
import com.lesingle.edu.entity.Task;

import java.util.List;

/**
 * 任务服务接口
 */
public interface TaskService extends com.baomidou.mybatisplus.extension.service.IService<Task> {

    Task createTask(Long tenantId, Long creatorId, String creatorRole, TaskCreateRequest request);

    Task updateTask(Long id, TaskUpdateRequest request);

    Task updateTaskWithTenantCheck(Long id, Long tenantId, TaskUpdateRequest request);

    Task getTaskById(Long id);

    Task getTaskByIdWithTenantCheck(Long id, Long tenantId);

    Page<Task> getTaskPage(Long tenantId, Integer pageNum, Integer pageSize, String keyword, String type, String status);

    /**
     * 分页查询任务（支持按创建人筛选）
     * @param creatorId 可选，仅返回该创建人的任务
     */
    Page<Task> getTaskPage(Long tenantId, Integer pageNum, Integer pageSize, String keyword, String type, String status, Long creatorId);

    /**
     * 分页查询任务（支持按创建人、任务时间范围筛选；与学校端时间交集逻辑一致）
     */
    Page<Task> getTaskPage(Long tenantId, Integer pageNum, Integer pageSize, String keyword, String type, String status, Long creatorId, String startDate, String endDate);

    Page<Task> getTasksByStudentId(Long studentId, Integer pageNum, Integer pageSize, String status);

    /**
     * 家长端：获取学生的任务列表（含完成信息与教师评价）
     */
    PageResult<TaskWithCompletionResponse> getTasksWithCompletionByStudentId(Long studentId, Integer pageNum, Integer pageSize, String status);

    /**
     * 家长端：获取我的任务列表（聚合多孩子任务）
     */
    PageResult<TaskWithCompletionResponse> getMyTasksForParent(Long parentId, Integer pageNum, Integer pageSize, String status);

    void deleteTask(Long id);

    void deleteTaskWithTenantCheck(Long id, Long tenantId);

    void completeTask(Long taskId, Long studentId, String content, String attachments);

    List<Task> getTasksByClassId(Long classId);

    // =============== 完成情况与评价相关方法 ===============

    /**
     * 获取任务完成情况列表
     */
    PageResult<TaskCompletionDetailResponse> getTaskCompletions(Long taskId, Long tenantId, Integer pageNum, Integer pageSize, String status);

    /**
     * 获取提交详情
     */
    TaskCompletionDetailResponse getCompletionDetail(Long completionId, Long tenantId);

    /**
     * 提交任务完成（家长端）
     */
    TaskCompletionDetailResponse submitTaskCompletion(Long taskId, TaskSubmitRequest request, Long tenantId);

    // =============== 学校端只读方法 ===============

    /**
     * 获取学校端任务列表（多维度筛选）
     */
    PageResult<TaskResponse> getSchoolTaskList(Long tenantId, Integer pageNum, Integer pageSize,
            String keyword, String type, String status,
            List<Long> classIds, List<Long> teacherIds,
            String dateType, String startDate, String endDate,
            String completionRate, String sortBy, String sortOrder);

    /**
     * 获取任务详情（学校端）
     */
    TaskResponse getTaskDetailForSchool(Long taskId, Long tenantId);

    /**
     * 获取任务详情（含目标类型、目标列表），用于编辑回显
     */
    TaskResponse getTaskDetailWithTargets(Long taskId, Long tenantId);

    /**
     * 填充任务的目标人数与已完成人数（教师端列表统计用）
     */
    void enrichTaskResponseWithStats(TaskResponse response, Long taskId);

}
