<?php

namespace OCA\BigBlueButton\Db;

use JsonSerializable;

use OCP\AppFramework\Db\Entity;
use OCP\Share\IShare;

/**
 * @method int getRoomId()
 * @method int getShareType()
 * @method string getShareWith()
 * @method string|null getShareWithDisplayName()
 * @method int getPermission()
 * @method void setShareWithDisplayName(string $displayName)
 * @method void setRoomId(int $id)
 * @method void setShareType(int $type)
 * @method void setShareWith(string $with)
 * @method void setShareWithDisplayName(string $displayName)
 * @method void setPermission(int $permission)
 */
class RoomShare extends Entity implements JsonSerializable {
	public const PERMISSION_ADMIN = 0;
	public const PERMISSION_MODERATOR = 1;
	public const PERMISSION_USER = 2;

	public const SHARE_TYPE_USER = IShare::TYPE_USER;
	public const SHARE_TYPE_GROUP = IShare::TYPE_GROUP;
	public const SHARE_TYPE_CIRCLE = IShare::TYPE_CIRCLE;

	protected $roomId;
	protected $shareType;
	protected $shareWith;
	protected $shareWithDisplayName;
	protected $permission;

	public function __construct() {
		$this->addType('roomId', 'integer');
		$this->addType('shareType', 'integer');
		$this->addType('permission', 'integer');
	}

	public function jsonSerialize(): array {
		return [
			'id' => $this->id,
			'roomId' => $this->roomId,
			'shareType' => $this->shareType,
			'shareWith' => $this->shareWith,
			'shareWithDisplayName' => $this->shareWithDisplayName,
			'permission' => $this->permission,
		];
	}

	public function hasUserPermission(): bool {
		return $this->permission === self::PERMISSION_ADMIN || $this->permission === self::PERMISSION_MODERATOR || $this->permission === self::PERMISSION_USER;
	}

	public function hasModeratorPermission(): bool {
		return $this->permission === self::PERMISSION_ADMIN || $this->permission === self::PERMISSION_MODERATOR;
	}

	public function hasAdminPermission(): bool {
		return $this->permission === self::PERMISSION_ADMIN;
	}
}