package com.reading.platform.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.reading.platform.dto.request.*;
import com.reading.platform.entity.Task;
import com.reading.platform.entity.TaskCompletion;
import com.reading.platform.entity.TaskTemplate;

import java.util.List;
import java.util.Map;

/**
 * Task Service Interface
 */
public interface TaskService extends IService<Task> {

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

    Task updateTask(String id, TaskUpdateRequest request);

    Task getTaskById(String id);

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

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

    void deleteTask(String id);

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

    List<Task> getTasksByClassId(String classId);

    // ==================== 任务统计 ====================

    /**
     * 获取任务统计数据
     */
    Map<String, Object> getTaskStats(String tenantId);

    /**
     * 按任务类型统计
     */
    Map<String, Object> getStatsByType(String tenantId);

    /**
     * 按班级统计
     */
    List<Map<String, Object>> getStatsByClass(String tenantId);

    /**
     * 获取月度统计趋势
     */
    List<Map<String, Object>> getMonthlyStats(String tenantId, Integer months);

    /**
     * 获取任务完成情况分页
     */
    Page<TaskCompletion> getTaskCompletions(String tenantId, String taskId, Integer pageNum, Integer pageSize, String status);

    /**
     * 更新任务完成状态
     */
    TaskCompletion updateTaskCompletion(String tenantId, String taskId, String studentId, String status, String feedback);

    // ==================== 任务模板 ====================

    /**
     * 获取模板列表
     */
    Page<TaskTemplate> getTemplatePage(String tenantId, Integer pageNum, Integer pageSize, String keyword, String type);

    /**
     * 根据 ID 获取模板
     */
    TaskTemplate getTemplateById(String tenantId, String id);

    /**
     * 获取默认模板（按类型）
     */
    TaskTemplate getDefaultTemplate(String tenantId, String taskType);

    /**
     * 创建模板
     */
    TaskTemplate createTemplate(String tenantId, String creatorId, TaskTemplateCreateRequest request);

    /**
     * 更新模板
     */
    TaskTemplate updateTemplate(String tenantId, String id, TaskTemplateUpdateRequest request);

    /**
     * 删除模板
     */
    void deleteTemplate(String tenantId, String id);

    /**
     * 从模板创建任务
     */
    Task createTaskFromTemplate(String tenantId, String creatorId, String creatorRole, CreateTaskFromTemplateRequest request);

    /**
     * 获取任务完成记录
     */
    TaskCompletion getTaskCompletion(String taskId, String studentId);

    /**
     * 获取即将到期任务
     */
    Page<Task> getUpcomingTasks(String tenantId, Integer pageNum, Integer pageSize, Integer days);

    /**
     * 发送任务提醒
     */
    void sendTaskReminder(String taskId);

}
