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

import com.qqchen.deploy.backend.workflow.dto.WorkflowNodeLogDTO;
import com.qqchen.deploy.backend.workflow.enums.LogLevel;
import com.qqchen.deploy.backend.workflow.enums.LogSource;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import java.util.List;

/**
 * 工作流节点日志服务接口
 * 使用 Flowable 的 processInstanceId + nodeId 作为日志关联键
 * 
 * @author qqchen
 * @since 2025-11-03
 */
public interface IWorkflowNodeLogService {
    
    /**
     * 记录日志（单条）
     */
    void log(String processInstanceId, String nodeId, LogSource source, LogLevel level, String message);
    
    /**
     * 批量记录日志
     */
    void batchLog(String processInstanceId, String nodeId, LogSource source, LogLevel level, List<String> messages);
    
    /**
     * 便捷方法：记录 INFO 日志
     */
    void info(String processInstanceId, String nodeId, LogSource source, String message);
    
    /**
     * 便捷方法：记录 WARN 日志
     */
    void warn(String processInstanceId, String nodeId, LogSource source, String message);
    
    /**
     * 便捷方法：记录 ERROR 日志
     */
    void error(String processInstanceId, String nodeId, LogSource source, String message);
    
    /**
     * 查询节点的所有日志
     */
    List<WorkflowNodeLogDTO> getNodeLogs(String processInstanceId, String nodeId);
    
    /**
     * 分页查询节点日志
     */
    Page<WorkflowNodeLogDTO> getNodeLogs(String processInstanceId, String nodeId, Pageable pageable);
    
    /**
     * 删除节点日志
     */
    void deleteNodeLogs(String processInstanceId, String nodeId);
}

