package com.aegis.emergency.dispatch.service;

import java.util.List;
import com.baomidou.mybatisplus.extension.service.IService;
import com.aegis.emergency.dispatch.domain.DispatchTaskStep;

/**
 * 调度任务行动项 Service 接口
 *
 * 负责任务行动项的管理与状态流转
 *
 * @author aegis
 */
public interface IDispatchTaskStepService extends IService<DispatchTaskStep> {

    /**
     * 根据任务ID查询行动项列表
     *
     * @param taskId 任务ID
     * @return 行动项集合（建议按 stepOrder 排序）
     */
    List<DispatchTaskStep> listByTaskId(Long taskId);

    /**
     * 批量创建行动项（导入预案/手动添加）
     *
     * @param taskId 任务ID
     * @param steps 行动项集合
     */
    void addSteps(Long taskId, List<DispatchTaskStep> steps);

    /**
     * 重新排序行动项
     *
     * @param taskId 任务ID
     * @param orderedStepIds 按照目标顺序排列的行动项ID列表
     */
    void reorderSteps(Long taskId, List<Long> orderedStepIds);

    /**
     * 开始执行行动项（pending -> in_progress）
     *
     * @param taskId 任务ID
     * @param stepId 行动项ID
     * @return 是否成功
     */
    boolean startStep(Long taskId, Long stepId);

    /**
     * 完成行动项（in_progress -> completed）
     *
     * @param taskId 任务ID
     * @param stepId 行动项ID
     * @param remark 完成备注/总结
     * @return 是否成功
     */
    boolean completeStep(Long taskId, Long stepId, String remark);

    /**
     * 标记行动项失败（in_progress -> failed）
     *
     * @param taskId 任务ID
     * @param stepId 行动项ID
     * @param reason 失败原因
     * @return 是否成功
     */
    boolean failStep(Long taskId, Long stepId, String reason);
}