package com.yunzhupaas.flowable.service;

import com.yunzhupaas.base.service.SuperService;
import com.yunzhupaas.base.vo.ListVO;
import com.yunzhupaas.exception.WorkFlowException;
import com.yunzhupaas.flowable.entity.DelegateEntity;
import com.yunzhupaas.flowable.entity.DelegateInfoEntity;
import com.yunzhupaas.flowable.model.candidates.CandidateUserVo;
import com.yunzhupaas.flowable.model.delegate.DelegateCrForm;
import com.yunzhupaas.flowable.model.delegate.DelegateListVO;
import com.yunzhupaas.flowable.model.delegate.DelegatePagination;
import com.yunzhupaas.flowable.model.delegate.DelegateUpForm;
import com.yunzhupaas.flowable.model.template.TemplatePageLisVO;
import com.yunzhupaas.flowable.model.template.TemplatePagination;

import java.util.List;

/**
 * 类的描述
 *
 * @author YUNZHUPAASYUNZHUPAAS开发组
 * @version 5.0.x
 * @since 2024/5/13 16:55
 */
public interface DelegateService extends SuperService<DelegateEntity> {

    /**
     * 列表
     *
     * @param pagination 分页参数
     */
    List<DelegateListVO> getList(DelegatePagination pagination);

    /**
     * 详情
     *
     * @param id 委托主键
     */
    DelegateEntity getInfo(String id);

    /**
     * 创建
     *
     * @param fo 参数
     */
    void create(DelegateCrForm fo);

    /**
     * 更新
     *
     * @param entity 实体
     * @param fo     参数
     */
    boolean update(DelegateEntity entity, DelegateUpForm fo);

    /**
     * 委托结束
     *
     * @param id     主键
     * @param entity 实体
     */
    boolean updateStop(String id, DelegateEntity entity);

    /**
     * 删除
     *
     * @param entity 实体
     */
    void delete(DelegateEntity entity);

    /**
     * 获取被委托人/代理人
     *
     * @param userId 委托人
     * @param flowId 流程主键
     */
    List<String> getToUser(String userId, String flowId);

    /**
     * 根据 被委托人/代理人id 获取列表
     *
     * @param toUserId 被委托人/代理人id
     */
    List<DelegateEntity> getByToUserId(String toUserId);

    /**
     * 根据 被委托人/代理人id 获取列表
     *
     * @param toUserId 被委托人/代理人id
     * @param type     类型
     */
    List<DelegateEntity> getByToUserId(String toUserId, Integer type);

    /**
     * 获取我的委托发起
     *
     * @param pagination 分页参数
     */
    List<TemplatePageLisVO> getFlow(TemplatePagination pagination);

    // /**
    // * 获取委托人列表
    // */
    // ListVO<CandidateUserVo> getUserList() throws WorkFlowException;

    /**
     * 获取委托人列表
     */
    ListVO<CandidateUserVo> getUserList(String templateId) throws WorkFlowException;

    /**
     * 获取当前用户所有发起委托列表
     */
    List<DelegateEntity> getLaunchDelagateList();

    /**
     * 根据条件查询相关委托信息
     *
     * @param fo 参数
     */
    List<DelegateEntity> selectSameParamAboutDelaget(DelegateCrForm fo);

    /**
     * 列表
     */
    List<DelegateEntity> getList();

    /**
     * 确认
     *
     * @param delegateInfo 委托信息
     */
    void notarize(DelegateInfoEntity delegateInfo);
}
