<?php

use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
use Dotenv\Dotenv;
use Monolog\Logger;
use Monolog\Handler\StreamHandler;

require_once __DIR__ . '/vendor/autoload.php';
// 加载.env文件
$dotenv = Dotenv::createImmutable(__DIR__);
$dotenv->load();
// 创建日志记录器
$log = new Logger('workerman');
// 添加日志处理程序,将日志写入文件
$log->pushHandler(new StreamHandler(__DIR__ . '/workerman.log', Logger::INFO));

$worker = new Worker('http://0.0.0.0:8787');

$worker->onMessage = function (TcpConnection $connection, Request $request) use ($log) {
    $log->info('Received POST data: ', $request->post());
    $work_dir = isset($_ENV['WORK_DIR']) ? $_ENV['WORK_DIR'] : null;
    $branch = isset($_ENV['BRANCH']) ? $_ENV['BRANCH'] : null;
    $git_url = isset($_ENV['GIT_URL']) ? $_ENV['GIT_URL'] : null;
    $log->info('env: ' . json_encode(['work_dir' => $work_dir, 'branch' => $branch, 'git_url' => $git_url], JSON_UNESCAPED_UNICODE));
    if ($work_dir && $branch && $git_url) {
        $repository = $request->post('repository');
        $log->info('repository: ', $repository);
        if (is_array($repository)) {
            $ssh_url = isset($repository['ssh_url']) ? $repository['ssh_url'] : null;
            $clone_url = isset($repository['clone_url']) ? $repository['clone_url'] : null;
            $log->info('ssh_url & clone_url: ' . json_encode(['ssh_url' => $ssh_url, 'clone_url' => $clone_url], JSON_UNESCAPED_UNICODE));
            if ($git_url === $ssh_url || $git_url === $clone_url) {
                chdir($work_dir);
                shell_exec("sh auto_build.sh > /dev/null &");
                $connection->send("finished\n");
                $connection->close();
                return;
            }
        }
    }
    $connection->send("done\n");
    $connection->close();
};

// 运行worker
Worker::runAll();