<?php

namespace xmvc\interface;

use xmvc\QueueJob;

/**
* 队列 - 接口
*/
interface IQueue
{
    /**
     * 构造
     * @param array $options 配置数组
     */
    public function __construct(array $options);
    /**
     * 将任务数据加入队列
     */
    public function put(array $data): self;
    /**
     * 获取任务
     *
     * @return QueueJob
     */
    public function reserve(): QueueJob;
    /**
     * 保持活动
     */
    public function touch(QueueJob $job): void;
    /**
     * 删除任务
     */
    public function delete(QueueJob $job): void;
    /**
     * 释放一个任务回到队列中
     */
    public function release(QueueJob $job): void;
    /**
     * 关闭连接
     */
    public function close(): void;
    /**
     * 获取 Job 状态
     */
    public function statsJob(QueueJob $job): mixed;
    /**
     * Job 是否有效
     */
    public function isvalid(QueueJob $job): bool;
    /**
     * 设置 Job 延迟
     */
    public function delay(QueueJob $job, int $seconds): bool;
    /**
     * 队列状态信息
     */
    public function status(): array;
    /**
     * 被 SIGTERM 信号中断时的, 服务中断错误信息文本片段
     */
    public function errorMessagePartBySIGTERM(): string;
}
