<?php

namespace FiloBlu\Esb\Api\Data;

/**
 * Interface QueueItemInterface
 * @package FiloBlu\Esb\Api\Data
 */
interface QueueItemInterface extends QueueMetadataInterface, RepositoryItem
{
    /** @var string */
    const ID = 'queue_id';
    /** @var string */
    const PRIORITY = 'priority';
    /** @var string */
    const RETRY_COUNT = 'retry_count';
    /** @var string */
    const RETRY_ITEM_ID = 'retry_item_id';
    /** @var string */
    const EVENT = 'event';
    /** @var string */
    const STATUS = 'status';
    /** @var string */
    const MESSAGE = 'message';
    /** @var string  */
    const MESSAGE_HASH = 'message_hash';
    /** @var string  */
    const OBJECT_TYPE = 'object_type';
    /** @var string  */
    const OBJECT_ID = 'object_id';
    /** @var string  */
    const OBJECT_METADATA_1 = 'object_metadata_1';
    /** @var string  */
    const OBJECT_METADATA_2 = 'object_metadata_2';
    /** @var string  */
    const OBJECT_METADATA_3 = 'object_metadata_3';
    /** @var string  */
    const OBJECT_METADATA_4 = 'object_metadata_4';

    /**
     * @return int
     */
    public function getId();

    /**
     * @param int $id
     * @return QueueItemInterface
     */
    public function setId($id): QueueItemInterface;

    /**
     * @return int
     */
    public function getPriority();

    /**
     * @param int $priority
     * @return QueueItemInterface
     */
    public function setPriority($priority): QueueItemInterface;

    /**
     * @return string
     */
    public function getEvent();

    /**
     * @param string $event
     * @return QueueItemInterface
     */
    public function setEvent($event): QueueItemInterface;

    /**
     * @return int
     */
    public function getRetryCount(): int;

    /**
     * @param $count
     * @return QueueItemInterface
     */
    public function setRetryCount($count): QueueItemInterface;

    /**
     * @return int
     */
    public function getRetryItemId(): int;

    /**
     * @param int $id
     * @return QueueItemInterface
     */
    public function setRetryItemId($id): QueueItemInterface;

    /**
     * @param StatusInterface $status
     * @return QueueItemInterface
     */
    public function setStatus(StatusInterface $status): QueueItemInterface;

    /**
     * @return StatusInterface
     */
    public function getStatus();

    /**
     * @param MessageInterface $message
     * @return QueueItemInterface
     */
    public function setMessage(MessageInterface $message): QueueItemInterface;

    /**
     * @return MessageInterface
     */
    public function getMessage();

    /**
     * @return string
     */
    public function getMessageHash();

    /**
     * @param string|null $hash
     * @return QueueItemInterface
     */
    public function setMessageHash($hash): QueueItemInterface;

    /**
     * @return string
     */
    public function getObjectType();

    /**
     * @param $type
     * @return QueueItemInterface
     */
    public function setObjectType($type): QueueItemInterface;

    /**
     * @return string
     */
    public function getObjectId();

    /**
     * @param $id
     * @return QueueItemInterface
     */
    public function setObjectId($id): QueueItemInterface;

    /**
     * @return mixed
     */
    public function getObjectMetadata1();

    /**
     * @param $metadata
     * @return QueueItemInterface
     */
    public function setObjectMetadata1($metadata): QueueItemInterface;

    /**
     * @return mixed
     */
    public function getObjectMetadata2();

    /**
     * @param $metadata
     * @return QueueItemInterface
     */
    public function setObjectMetadata2($metadata): QueueItemInterface;

    /**
     * @return mixed
     */
    public function getObjectMetadata3();

    /**
     * @param $metadata
     * @return QueueItemInterface
     */
    public function setObjectMetadata3($metadata): QueueItemInterface;

    /**
     * @return mixed
     */
    public function getObjectMetadata4();

    /**
     * @param $metadata
     * @return QueueItemInterface
     */
    public function setObjectMetadata4($metadata): QueueItemInterface;
}
