using Hua.Todo.Application.Models;

namespace Hua.Todo.Application.Interfaces;

/// <summary>
/// 任务管理服务接口
/// </summary>
public interface ITaskService : IDynamicApiService
{
    /// <summary>
    /// 获取所有任务
    /// </summary>
    /// <returns>包含所有任务的列表</returns>
    Task<List<TaskDto>> GetAllTasksAsync();

    /// <summary>
    /// 根据 ID 获取任务
    /// </summary>
    /// <param name="id">任务唯一标识符</param>
    /// <returns>匹配的任务 DTO，如果未找到则返回 null</returns>
    Task<TaskDto?> GetTaskByIdAsync(int id);

    /// <summary>
    /// 获取未完成的任务
    /// </summary>
    /// <returns>未完成任务的列表</returns>
    Task<List<TaskDto>> GetActiveTasksAsync();

    /// <summary>
    /// 获取已完成的任务
    /// </summary>
    /// <returns>已完成任务的列表</returns>
    Task<List<TaskDto>> GetCompletedTasksAsync();

    /// <summary>
    /// 创建新任务
    /// </summary>
    /// <param name="dto">创建任务所需的数据传输对象</param>
    /// <returns>创建成功的任务 DTO</returns>
    Task<TaskDto> CreateTaskAsync(CreateTaskDto dto);

    /// <summary>
    /// 更新任务信息
    /// </summary>
    /// <param name="dto">包含更新信息的任务数据传输对象</param>
    /// <returns>更新后的任务 DTO</returns>
    Task<TaskDto> UpdateTaskAsync(UpdateTaskDto dto);

    /// <summary>
    /// 切换任务完成状态
    /// </summary>
    /// <param name="id">任务唯一标识符</param>
    /// <returns>更新状态后的任务 DTO</returns>
    Task<TaskDto> ToggleCompleteAsync(int id);

    /// <summary>
    /// 删除任务
    /// </summary>
    /// <param name="id">要删除的任务唯一标识符</param>
    Task DeleteTaskAsync(int id);

    /// <summary>
    /// 获取子任务列表
    /// </summary>
    /// <param name="parentTaskId">父任务唯一标识符</param>
    /// <returns>该父任务下的所有子任务列表</returns>
    Task<List<TaskDto>> GetSubTasksAsync(int parentTaskId);
}
