package tech.easyflow.approval.service;

import com.mybatisflex.core.paginate.Page;
import tech.easyflow.approval.entity.vo.ApprovalInstanceDetailVo;
import tech.easyflow.approval.entity.vo.ApprovalInstancePageVo;

import java.math.BigInteger;

/**
 * 审批查询服务。
 */
public interface ApprovalQueryService {

    /**
     * 分页查询待审批列表。
     *
     * @param resourceType 资源类型
     * @param actionType 动作类型
     * @param keyword 关键词
     * @param pageNumber 页码
     * @param pageSize 每页数量
     * @return 待审批分页
     */
    Page<ApprovalInstancePageVo> pendingPage(String resourceType, String actionType, String keyword,
                                             Long pageNumber, Long pageSize);

    /**
     * 分页查询已审批列表。
     *
     * @param resourceType 资源类型
     * @param actionType 动作类型
     * @param keyword 关键词
     * @param pageNumber 页码
     * @param pageSize 每页数量
     * @return 已审批分页
     */
    Page<ApprovalInstancePageVo> processedPage(String resourceType, String actionType, String keyword,
                                               Long pageNumber, Long pageSize);

    /**
     * 分页查询我发起的审批列表。
     *
     * @param resourceType 资源类型
     * @param actionType 动作类型
     * @param keyword 关键词
     * @param pageNumber 页码
     * @param pageSize 每页数量
     * @return 我发起的审批分页
     */
    Page<ApprovalInstancePageVo> initiatedPage(String resourceType, String actionType, String keyword,
                                               Long pageNumber, Long pageSize);

    /**
     * 查询审批实例详情。
     *
     * @param instanceId 审批实例ID
     * @return 审批实例详情
     */
    ApprovalInstanceDetailVo detail(BigInteger instanceId);
}
