package cn.axzo.workflow.core.service;

import cn.axzo.workflow.common.model.dto.OrgStructureSnapshotInfo;
import cn.axzo.workflow.common.model.dto.SimpleTaskDTO;
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
import cn.axzo.workflow.core.repository.entity.ExtAxProcessLog;

import java.util.List;

/**
 * Api Log 表操作服务
 *
 * @author wangli
 * @since 2024/4/3 10:40
 */
public interface ExtAxProcessLogService {
    /**
     * 新增审批流程日志
     *
     * @param log
     * @return
     */
    Long insert(ExtAxProcessLog log);

    /**
     * 根据参数删除指定任务
     *
     * @param deleteLog 查询条件
     */
    void delete(ExtAxProcessLog deleteLog);

    /**
     * 根据有 ID 的实体直接更新
     *
     * @param updateLog
     */
    void updateById(ExtAxProcessLog updateLog);

    /**
     * 根据条件更新指定对象的列
     *
     * @param query
     * @param update
     */
    void update(ExtAxProcessLog query, ExtAxProcessLog update);

    /**
     * 更新指定任务的审批人
     *
     * @param updateLog
     * @param assignee
     */
    void updateAssigneeAndSnapshot(ExtAxProcessLog updateLog, BpmnTaskDelegateAssigner assignee, OrgStructureSnapshotInfo snapshotInfo);

    void updateAssigneeAndSnapshot(ExtAxProcessLog updateLog, BpmnTaskDelegateAssigner assignee,  OrgStructureSnapshotInfo snapshotInfo, String operationDesc);

    List<ExtAxProcessLog> genericQuery(ExtAxProcessLog query);

    ExtAxProcessLog findByProcessIdAndTaskIdWithDeleted(String processId, String taskId);

    /**
     * 机器人节点会删除日志，这里仅仅为了恢复日志都删除标识，并更新时间。
     *
     * @param processInstanceId
     * @param taskId
     */
    void restore(String processInstanceId, String taskId);

    void batchRestore(List<SimpleTaskDTO> tasks);
}
