<?php

// Фреймворк Telegram
use Zanzara\Zanzara;
use Zanzara\Context;
use Zanzara\Config;

// Фреймворк для Google Sheets
use Flow\ETL\Adapter\GoogleSheet\GoogleSheetRange,
	Flow\ETL\Adapter\GoogleSheet\GoogleSheetExtractor,
	Flow\ETL\Adapter\GoogleSheet\Columns,
	Flow\ETL\Flow,
	Flow\ETL\Config as _config,
	Flow\ETL\FlowContext,
	Flow\ETL\Row\Entry,
	Flow\ETL\Row,
	Flow\ETL\DSL\To,
	Flow\ETL\DSL\From;

// Фреймворк для Google API
use Google\Client,
	Google\Service\Sheets,
	Google\Service\Sheets\ValueRange;


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

/* ini_set('error_reporting', E_ALL);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1); */

$config = new Config();
$config->setParseMode(Config::PARSE_MODE_MARKDOWN);

$bot = new Zanzara(require(__DIR__ . '/../settings/key.php'), $config);

$timer;

$member;

$bot->onMessage(function (Context $ctx) {
	if ($members = $ctx->getMessage()->getNewChatMembers()) {
		// Новый аккаунт в чате

		$ctx->sendMessage('⚠️ Введите ваш табельный номер для авторизации', ['reply_to_message_id' => $ctx->getMessage()->getMessageId()])
			->then(function () use ($ctx, $members) {

				global $member;

				// Инициализация идентификатора сотрудника
				$member = $id = $members[0]->getId();

				global $timer;

				$timer = React\Promise\Timer\sleep(30);

				$timer->then(
					function ($value) use ($ctx, $id) {
						// Изгнание из чата
						$ctx->kickChatMember($ctx->getMessage()->getChat()->getId(), $id);

						$ctx->wipeCache();

						$ctx->endConversation();
					},
					function () {
					}
				);

				$ctx->nextStep('check');
			});
	}
});

function check(Context $ctx)
{
	global $member;

	if ($member === $ctx->getMessage()->getFrom()->getId()) {
		// Отправителем табельного номера является тот кто подключился к серверу

		$id = $ctx->getMessage()->getText();

		$settings = json_decode(require(__DIR__ . '/../settings/workers/google.php'), true);
		$document = require(__DIR__ . '/../settings/workers/document.php');
		$sheets = require(__DIR__ . '/../settings/workers/sheets.php');

		$client = new Client();
		$client->setScopes(Sheets::SPREADSHEETS);
		$client->setAuthConfig($settings);
		$api = new Sheets($client);

		foreach ($sheets as $sheet) {
			$rows = (new Flow())->read(new GoogleSheetExtractor($api, $document, new Columns($sheet, 'A', 'A'), true, 1000));

			foreach ($rows->fetch(10000) as $row) {
				// Перебор строк

				if ($id === $row->toArray()['ID']) {
					$ctx->sendMessage("✅ Авторизован сотрудник: $id");

					global $timer;

					// Отмена блокировки
					$timer->cancel();

					$ctx->endConversation();

					return;
				}
			}

			$ctx->sendMessage("⛔ Не найден сотрудник: $id");
		}
	}
}

$bot->run();
