package com.example.demo.repository;

import com.example.demo.model.TaskDraft;

import java.util.List;
import java.util.Optional;

/**
 * 任务草案仓储接口。
 * <p>
 * 定义任务草案数据的存储操作，当前基于内存实现。
 * 后续可扩展为 PostgreSQL / 达梦DM8 数据库实现。
 * </p>
 */
public interface TaskDraftRepository {

    /**
     * 保存任务草案。
     *
     * @param draft 任务草案
     * @return 保存后的草案
     */
    TaskDraft save(TaskDraft draft);

    /**
     * 根据ID查询任务草案。
     *
     * @param draftId 草案ID
     * @return 草案（Optional）
     */
    Optional<TaskDraft> findById(String draftId);

    /**
     * 根据事件ID查询任务草案。
     *
     * @param eventId 事件ID
     * @return 草案列表
     */
    List<TaskDraft> findByEventId(String eventId);

    /**
     * 查询所有任务草案。
     *
     * @return 草案列表
     */
    List<TaskDraft> findAll();

    /**
     * 查询所有发送失败的任务草案（用于重试）。
     *
     * @return 发送失败的草案列表
     */
    List<TaskDraft> findAllFailed();

    /**
     * 更新发送状态。
     *
     * @param draftId    草案ID
     * @param sendStatus 发送状态
     * @param retryCount 重试次数
     * @return 更新后的草案
     */
    Optional<TaskDraft> updateSendStatus(String draftId, int sendStatus, int retryCount);
}
