package com.qqchen.deploy.backend.deploy.service;

import com.qqchen.deploy.backend.deploy.dto.*;

import java.util.List;

/**
 * 部署服务接口
 *
 * @author qqchen
 * @since 2025-11-02
 */
public interface IDeployService {

    /**
     * 获取当前用户可部署的环境和应用
     *
     * @return 用户所属团队的可部署环境列表
     */
    List<UserTeamDeployableDTO> getDeployableEnvironments();

    /**
     * 执行部署
     *
     * @param request 部署请求
     * @return 部署结果
     */
    DeployResultDTO executeDeploy(DeployExecuteRequest request);

    /**
     * 获取当前用户的部署审批任务列表
     * <p>查询当前登录用户待审批的部署任务，包含完整的部署业务上下文信息
     *
     * @param teamId 团队ID（可选，用于筛选指定团队的审批任务）
     * @param environmentId 环境ID（可选，用于筛选指定环境的审批任务）
     * @param workflowDefinitionKeys 工作流定义Key列表（可选，支持查询多个工作流的待审批任务）
     * @return 部署审批任务列表
     */
    List<DeployApprovalTaskDTO> getMyApprovalTasks(Long teamId, Long environmentId, List<String> workflowDefinitionKeys);

    /**
     * 完成部署审批
     * <p>完成部署审批任务，支持通过/拒绝两种结果
     * <p>后续节点（如Jenkins构建、通知）将由Flowable异步执行，不会阻塞HTTP请求
     *
     * @param request 审批完成请求
     */
    void completeApproval(DeployApprovalCompleteRequest request);

    /**
     * 获取节点日志
     * <p>获取指定节点的执行日志，日志保留7天，超过7天将被清除
     *
     * @param processInstanceId 流程实例ID
     * @param nodeId            节点ID
     * @return 节点日志响应
     */
    DeployNodeLogDTO getNodeLogs(String processInstanceId, String nodeId);
}

