package tech.easyflow.approval.service;

import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.service.IService;
import tech.easyflow.approval.entity.ApprovalFlow;
import tech.easyflow.approval.entity.vo.ApprovalFlowDetailVo;
import tech.easyflow.approval.entity.vo.ApprovalFlowPageVo;

import java.math.BigInteger;

/**
 * 审批流程服务。
 */
public interface ApprovalFlowService extends IService<ApprovalFlow> {

    /**
     * 分页查询审批流程。
     *
     * @param name 流程名称
     * @param resourceType 资源类型
     * @param actionType 动作类型
     * @param status 流程状态
     * @param pageNumber 页码
     * @param pageSize 每页数量
     * @return 流程分页结果
     */
    Page<ApprovalFlowPageVo> pageFlows(String name, String resourceType, String actionType, String status,
                                       Long pageNumber, Long pageSize);

    /**
     * 查询审批流程详情。
     *
     * @param id 流程ID
     * @return 流程详情
     */
    ApprovalFlowDetailVo getFlowDetail(BigInteger id);

    /**
     * 新增审批流程。
     *
     * @param request 流程详情请求
     * @param operatorId 操作人ID
     * @return 新增后的流程ID
     */
    BigInteger saveFlow(ApprovalFlowDetailVo request, BigInteger operatorId);

    /**
     * 更新审批流程。
     *
     * @param request 流程详情请求
     * @param operatorId 操作人ID
     */
    void updateFlow(ApprovalFlowDetailVo request, BigInteger operatorId);

    /**
     * 启用审批流程。
     *
     * @param id 流程ID
     * @param operatorId 操作人ID
     */
    void enableFlow(BigInteger id, BigInteger operatorId);

    /**
     * 停用审批流程。
     *
     * @param id 流程ID
     * @param operatorId 操作人ID
     */
    void disableFlow(BigInteger id, BigInteger operatorId);

    /**
     * 删除审批流程。
     *
     * @param id 流程ID
     */
    void removeFlow(BigInteger id);
}
