<?php
require_once '/root/.composer/vendor/autoload.php';

use SebastianBergmann\CodeCoverage\Data\RawCodeCoverageData;
use SebastianBergmann\CodeCoverage\CodeCoverage;
use SebastianBergmann\CodeCoverage\Driver\Selector;
use SebastianBergmann\CodeCoverage\Filter;
use SebastianBergmann\CodeCoverage\Report\Html\Facade as HtmlReport;
use SebastianBergmann\CodeCoverage\Report\Text as TextReport;
use SebastianBergmann\CodeCoverage\Report\Thresholds as ThresholdsReport;

// 读取 coverage.json
$coverageJsonFile = __DIR__ . '/coverage.json';
if (!file_exists($coverageJsonFile)) {
    echo "❌ 找不到 coverage.json 文件\n";
    exit(1);
}

$rawArray = json_decode(file_get_contents($coverageJsonFile), true);
if ($rawArray === null) {
    echo "❌ JSON 格式错误\n";
    exit(1);
}
// 构建 Raw 数据对象
$rawData = RawCodeCoverageData::fromXdebugWithoutPathCoverage($rawArray);

// 构建 Filter，包含需要覆盖率分析的 PHP 文件
$filter = new Filter();
$phpFiles = glob(__DIR__ . '/actions/*.php');
if ($phpFiles) {
    var_dump($phpFiles);
    $filter->includeFiles($phpFiles);
}

// 初始化 CodeCoverage 对象
$coverage = new CodeCoverage(
    (new Selector())->forLineCoverage($filter),
    $filter
);

// ✅ 追加 Raw 覆盖数据（需要提供 testId）
$coverage->append($rawData, 'xxx', 'workerman-test');


// ✅ 生成 HTML 报告
$htmlOutputDir = __DIR__ . '/coverage-report';
(new HtmlReport())->process($coverage, $htmlOutputDir);
echo "✅ HTML 报告已生成于：$htmlOutputDir\n";



// ✅ 生成 TEXT 报告
// 创建阈值对象（可以自定义）
$thresholds = ThresholdsReport::default();

// 初始化 Text 报告器
$textReport = new TextReport(
    thresholds: $thresholds,
    showUncoveredFiles: true,       // 是否显示未覆盖文件
    showOnlySummary: false          // 是否只显示摘要
);

file_put_contents(__DIR__ . '/coverage.txt', $textReport->process($coverage));