package com.example.demo.repository;

import com.example.demo.model.TaskScheme;
import com.example.demo.model.enums.SchemeStatus;

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

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

    /**
     * 保存任务方案。
     *
     * @param scheme 任务方案
     * @return 保存后的方案
     */
    TaskScheme save(TaskScheme scheme);

    /**
     * 根据ID查询方案。
     *
     * @param schemeId 方案ID
     * @return 方案（Optional）
     */
    Optional<TaskScheme> findById(String schemeId);

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

    /**
     * 根据状态查询方案。
     *
     * @param status 方案状态
     * @return 方案列表
     */
    List<TaskScheme> findByStatus(SchemeStatus status);

    /**
     * 根据关联事件ID查询方案。
     *
     * @param eventId 事件ID
     * @return 方案列表
     */
    List<TaskScheme> findByEventId(String eventId);

    /**
     * 更新方案状态。
     *
     * @param schemeId 方案ID
     * @param status   新状态
     * @return 更新后的方案
     */
    Optional<TaskScheme> updateStatus(String schemeId, SchemeStatus status);

    /**
     * 更新执行进度。
     *
     * @param schemeId 方案ID
     * @param progress 执行进度百分比
     * @return 更新后的方案
     */
    Optional<TaskScheme> updateProgress(String schemeId, int progress);

    /**
     * 删除方案。
     *
     * @param schemeId 方案ID
     */
    void deleteById(String schemeId);
}
