<?php
/*
 * Copyright (c) 2010-2018 Tim Düsterhus.
 *
 * Use of this software is governed by the Business Source License
 * included in the LICENSE file.
 *
 * Change Date: 2022-08-16
 *
 * 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\system\command;

use \wcf\data\user\User;
use \wcf\system\exception\UserInputException;
use \wcf\system\WCF;

/**
 * Adds helpful functions for commands that operate on a user.
 */
trait TNeedsUser {
	/**
	 * Returns the user with the given username.
	 *
	 * @param   string  $username
	 * @return  \wcf\data\user\User
	 */
	protected function getUser($username) {
		static $cache = [ ];
		if (!isset($cache[$username])) {
			$cache[$username] = User::getUserByUsername($username);
		}

		return $cache[$username];
	}

	/**
	 * Checks whether the given username is valid and throws otherwise.
	 *
	 * @param   string  $username
	 * @return  \wcf\data\user\User
	 */
	protected function assertUser($username) {
		$user = $this->getUser($username);

		if (!$user->userID) throw new UserInputException('message', WCF::getLanguage()->getDynamicVariable('chat.error.userNotFound', [ 'username' => $username ]));

		return $user;
	}
}