<?php

ob_start(function($buffer) {
	fwrite(STDERR, $buffer);
}, 1);

if (!(
	file_exists(__DIR__.'/vendor/amphp/amp') &&
	file_exists(__DIR__.'/vendor/amphp/byte-stream') &&
	file_exists(__DIR__.'/vendor/amphp/websocket-client')))
{
	$composer_path = 'composer';

	system($composer_path." -qV", $result_code);

	if ($result_code) {
		$composer_path = __DIR__.'/composer';
		copy("https://getcomposer.org/download/latest-stable/composer.phar", $composer_path);
		chmod($composer_path, 0755);
	}

	system('cd '.__DIR__.'; '.$composer_path.' require '.implode(' ', [
		'amphp/websocket-client',
		'amphp/byte-stream',
		'amphp/amp'
	]));
}

require __DIR__.'/vendor/autoload.php';

use function \Amp\async;
use function \Amp\delay;
use function \Amp\Websocket\Client\connect;
use function \Amp\ByteStream\getStdin;
use \Amp\ByteStream\BufferedReader;

echo 'connecting -';

$conn = false;

$spin = 0;

async(function() {
	global $conn, $spin;

	while (!$conn) {
		$spin += 1;
		$spin %= 4;
		echo "\x08".['-','\\',"|",'/'][$spin];
		delay(0.1);
	}
});

$conn = connect('wss://codeguessing.gay/73/ws');
echo "\r            \r";

ob_end_flush();

async(function() {
	global $conn;

	foreach($conn as $msg) {
		$msg = $msg->buffer();
		$msg = json_decode($msg);

		switch($msg->reason) {

		case "connect":
			echo"*** ".$msg->name." joined the game. ***\n";
			break;

		case "disconnect":
			echo "*** ".$msg->name." left the game. ***\n";
			break;

		case "message":
			if (is_string($msg->content)) {
				echo "<".$msg->name."> ".$msg->content."\n";
				break;
			}

		default:
			echo json_encode($msg)."\n";
		}
	}
});

$io = new BufferedReader(getStdin());

while(1) {
	try {
		$x = $io->readUntil("\n");
	} catch (Exception $e) {
		break;
	}
	$conn->sendText(json_encode(["content" => $x]));
}

