<?php
requirePHPLib('form');

Auth::check() || redirectToLogin();
UOJContest::init(UOJRequest::get('id')) || UOJResponse::page404();

$contest = UOJContest::info();

$is_manager = UOJContest::cur()->userCanManage(Auth::user());
$show_ip = isSuperUser(Auth::user());

if ($is_manager) {
	$add_new_contestant_form = new UOJForm('add_new_contestant_form');
	$add_new_contestant_form->addInput(
		'new_username',
		[
			'placeholder' => '用户名',
			'validator_php' => function ($username, &$vdata) {
				$user = UOJUser::query($username);

				if (!$user) {
					return '用户不存在';
				}

				if (UOJContest::cur()->userHasRegistered($user)) {
					return '该用户已经报名';
				}

				$vdata['user'] = $user;

				return '';
			},
		]
	);
	$add_new_contestant_form->config['submit_container']['class'] = 'mt-3 text-center';
	$add_new_contestant_form->config['submit_button']['class'] = 'btn btn-secondary';
	$add_new_contestant_form->config['submit_button']['text'] = '注册该用户';
	$add_new_contestant_form->handle = function (&$vdata) {
		UOJContest::cur()->userRegister($vdata['user']);
	};
	$add_new_contestant_form->runAtServer();

	$add_group_to_contest_form = new UOJForm('add_group_to_contest');
	$add_group_to_contest_form->addInput(
		'group_id',
		[
			'placeholder' => '小组 ID',
			'validator_php' => function ($group_id, &$vdata) {
				$group = UOJGroup::query($group_id);
				if (!$group) {
					return '小组不存在';
				}

				$vdata['group'] = $group;

				return '';
			},
		]
	);
	$add_group_to_contest_form->config['submit_container']['class'] = 'mt-3 text-center';
	$add_group_to_contest_form->config['submit_button']['class'] = 'btn btn-secondary';
	$add_group_to_contest_form->config['submit_button']['text'] = '注册该小组中的用户';
	$add_group_to_contest_form->handle = function (&$vdata) {
		$usernames = $vdata['group']->getUsernames();

		foreach ($usernames as $username) {
			$user = UOJUser::query($username);

			UOJContest::cur()->userRegister($user);
		}
	};
	$add_group_to_contest_form->runAtServer();

	$remove_user_from_contest_form = new UOJForm('remove_user_from_contest');
	$remove_user_from_contest_form->addInput(
		'remove_username',
		[
			'placeholder' => '用户名',
			'validator_php' => function ($username, &$vdata) {
				$user = UOJUser::query($username);

				if (!$user) {
					return '用户不存在';
				}

				if (!UOJContest::cur()->userHasRegistered($user)) {
					return '该用户未报名';
				}

				$vdata['user'] = $user;

				return '';
			},
		]
	);
	$remove_user_from_contest_form->config['submit_container']['class'] = 'mt-3 text-center';
	$remove_user_from_contest_form->config['submit_button']['class'] = 'btn btn-danger';
	$remove_user_from_contest_form->config['submit_button']['text'] = '移除该用户';
	$remove_user_from_contest_form->handle = function (&$vdata) {
		UOJContest::cur()->userUnregister($vdata['user']);
	};
	$remove_user_from_contest_form->runAtServer();

	$force_set_user_participated_form = new UOJForm('force_set_user_participated');
	$force_set_user_participated_form->addInput(
		'force_set_username',
		[
			'placeholder' => '用户名',
			'validator_php' => function ($username, &$vdata) {
				$user = UOJUser::query($username);

				if (!$user) {
					return '用户不存在';
				}

				if (!UOJContest::cur()->userHasRegistered($user)) {
					return '该用户未报名';
				}

				$vdata['user'] = $user;

				return '';
			},
		]
	);
	$force_set_user_participated_form->config['submit_container']['class'] = 'mt-3 text-center';
	$force_set_user_participated_form->config['submit_button']['class'] = 'btn btn-warning';
	$force_set_user_participated_form->config['submit_button']['text'] = '强制参赛';
	$force_set_user_participated_form->handle = function (&$vdata) {
		UOJContest::cur()->markUserAsParticipated($vdata['user']);
	};
	$force_set_user_participated_form->runAtServer();
}

if ($contest['cur_progress'] == CONTEST_NOT_STARTED) {
	$iHasRegistered = UOJContest::cur()->userHasRegistered(Auth::user());

	if ($iHasRegistered) {
		if ($iHasRegistered && UOJContest::cur()->freeRegistration()) {
			$unregister_form = new UOJForm('unregister');
			$unregister_form->handle = function () {
				UOJContest::cur()->userUnregister(Auth::user());
			};
			$unregister_form->config['submit_container']['class'] = 'text-end';
			$unregister_form->config['submit_button']['class'] = 'btn btn-danger btn-xs';
			$unregister_form->config['submit_button']['text'] = '取消报名';
			$unregister_form->succ_href = "/contests";
			$unregister_form->runAtServer();
		}
	}
}
?>
<?php echoUOJPageHeader(HTML::stripTags(UOJContest::info('name')) . ' - ' . UOJLocale::get('contests::contest registrants')) ?>

<h1 class="text-center">
	<?= UOJContest::info('name') ?>
</h1>

<?php if (UOJContest::cur()->progress() == CONTEST_NOT_STARTED) : ?>
	<?php if ($iHasRegistered) : ?>
		<div class="row mb-3">
			<div class="col-6">
				<a class="text-decoration-none text-success">已报名</a>
			</div>
			<div class="col-6">
				<?php $unregister_form->printHTML() ?>
			</div>
		</div>
	<?php else : ?>
		<div class="mb-3">
			当前尚未报名,您可以 <a class="text-decoration-none text-danger" href="/contest/<?= UOJContest::info('id') ?>/register">报名</a>。
		</div>
	<?php endif ?>
<?php endif ?>

<?php
$header_row = '<tr>';
$header_row .= '<th>#</th><th>' . UOJLocale::get('username') . '</th>';
if ($show_ip) {
	$header_row .= '<th>remote_addr</th><th>http_x_forwarded_for</th>';
}
if ($is_manager) {
	$header_row .= '<th>是否参赛</th>';
}
$header_row .= '</tr>';

echoLongTable(
	['*'],
	'contests_registrants',
	['contest_id' => $contest['id']],
	'order by username desc',
	$header_row,
	function ($contestant, $num) use ($is_manager, $show_ip) {
		$user = UOJUser::query($contestant['username']);

		echo '<tr>';
		echo '<td>' . $num . '</td>';
		echo '<td>' . UOJUser::getLink($user) . '</td>';
		if ($show_ip) {
			echo '<td>' . $user['remote_addr'] . '</td>';
			echo '<td>' . $user['http_x_forwarded_for'] . '</td>';
		}
		if ($is_manager) {
			echo '<td>' . ($contestant['has_participated'] ? 'Yes' : 'No') . '</td>';
		}
		echo '</tr>';
	},
	[
		'page_len' => 50,
		'get_row_index' => '',
		'div_classes' => ['table-responsive', 'card', 'mb-3'],
		'table_classes' => ['table', 'uoj-table', 'mb-0', 'text-center'],
	]
);
?>

<div class="row gy-2 gx-3 align-items-center">
	<?php if (isset($add_new_contestant_form)) : ?>
		<div class="col-auto">
			<div class="card">
				<div class="card-header fw-bold">添加参赛者</div>
				<div class="card-body">
					<?php $add_new_contestant_form->printHTML() ?>
				</div>
			</div>
		</div>
	<?php endif ?>

	<?php if (isset($add_group_to_contest_form)) : ?>
		<div class="col-auto">
			<div class="card">
				<div class="card-header fw-bold">小组报名</div>
				<div class="card-body">
					<?php $add_group_to_contest_form->printHTML() ?>
				</div>
			</div>
		</div>
	<?php endif ?>

	<?php if (isset($remove_user_from_contest_form)) : ?>
		<div class="col-auto">
			<div class="card border-danger">
				<div class="card-header fw-bold text-bg-danger">移除选手</div>
				<div class="card-body">
					<?php $remove_user_from_contest_form->printHTML() ?>
				</div>
			</div>
		</div>
	<?php endif ?>

	<?php if (isset($force_set_user_participated_form)) : ?>
		<div class="col-auto">
			<div class="card">
				<div class="card-header fw-bold">强制参赛</div>
				<div class="card-body">
					<?php $force_set_user_participated_form->printHTML() ?>
				</div>
			</div>
		</div>
	<?php endif ?>
</div>

<?php echoUOJPageFooter() ?>