<?php
/*
 * Copyright (c) 2010-2020 Tim Düsterhus.
 *
 * Use of this software is governed by the Business Source License
 * included in the LICENSE file.
 *
 * Change Date: 2024-11-20
 *
 * On the date above, in accordance with the Business Source
 * License, use of this software will be governed by version 2
 * or later of the General Public License.
 */

namespace chat\data\message;

use \chat\data\room\Room;
use \wcf\data\object\type\ObjectType;
use \wcf\data\object\type\ObjectTypeCache;

/**
 * Represents a chat message.
 *
 * @property-read	integer	$messageID
 * @property-read	integer	$time
 * @property-read	integer	$roomID
 * @property-read	integer	$userID
 * @property-read	string	$username
 * @property-read	integer	$objectTypeID
 * @property-read	mixed	$payload
 * @property-read	integer	$hasEmbeddedObjects
 * @property-read	integer	$isDeleted
 */
class Message extends \wcf\data\DatabaseObject {
	/**
	 * @inheritDoc
	 */
	protected function handleData($data) {
		parent::handleData($data);

		$this->data['payload'] = @unserialize($this->data['payload']);
		if (!is_array($this->data['payload'])) {
			$this->data['payload'] = [ ];
		}
	}

	/**
	 * Returns whether this message already is inside the log.
	 */
	public function isInLog(): bool {
		return $this->time < (TIME_NOW - CHAT_ARCHIVE_AFTER);
	}

	/**
	 * Returns the message type object of this message.
	 */
	public function getMessageType(): ObjectType {
		return ObjectTypeCache::getInstance()->getObjectType($this->objectTypeID);
	}

	/**
	 * Returns the chat room that contains this message.
	 */
	public function getRoom(): Room {
		return \chat\data\room\RoomCache::getInstance()->getRoom($this->roomID);
	}
}