package com.dora.service;

public interface QueueService {

    /**
     * 将任务编号加入指定模型的等待队列。
     *
     * @param modelName 任务使用的模型名称，用于区分不同的队列
     * @param taskNo    要入队的任务编号
     */
    void enqueue(String modelName, String taskNo);

    /**
     * 从指定模型的等待队列中取出一个任务编号。
     *
     * @param modelName 任务使用的模型名称
     * @return 队列头的任务编号，如果队列为空则返回null
     */
    String dequeue(String modelName);

    /**
     * 获取指定模型队列的当前长度。
     *
     * @param modelName 模型名称
     * @return 队列中的任务数量
     */
    long getQueueLength(String modelName);

    /**
     * 增加指定模型正在处理的任务数。
     *
     * @param modelName 模型名称
     * @return 增加后的计数值
     */
    long incrementProcessingCount(String modelName);

    /**
     * 减少指定模型正在处理的任务数。
     *
     * @param modelName 模型名称
     * @return 减少后的计数值
     */
    long decrementProcessingCount(String modelName);

    /**
     * 获取指定模型当前正在处理的任务数。
     *
     * @param modelName 模型名称
     * @return 正在处理的任务数量
     */
    int getProcessingCount(String modelName);

    /**
     * 从指定模型的队列中移除特定任务。
     *
     * @param modelName 模型名称
     * @param taskNo    要移除的任务编号
     * @return 移除的任务数量（0表示任务不在队列中，1表示成功移除）
     */
    long removeFromQueue(String modelName, String taskNo);
}
