<?php

use xmvc\Dump;
use xmvc\MVC;

$maxRecord = 1000; // 前 1000 条

if (is_file($file)) {
    $fileData = file($file);
    $fileDataCount = count($fileData);
    $data = [];
    $regI = 0;
    for ($i = $fileDataCount - 1; $i > -1; $i--) {
        if (++$regI > $maxRecord) {
            break;
        }
        $line = trim($fileData[$i]);
        if ($line == '') {
            continue;
        }
        if (substr($line, -2) == '[]') {
            $webProcessor = [
                "url" => "",
                "ip" => "",
                "http_method" => "",
                "server" => "",
                "referrer" => ""
            ];
            $line = substr($line, 0, -3); // 空格[]
        } else {
            $pos = strrpos($line, '{'); // 最末尾的 { 位置
            $webProcessor = json_decode(substr($line, $pos), true);
            $line = rtrim(substr($line, 0, $pos));
        }
        $contexts = [];
        if (substr($line, -2) == '[]') {
            $line = substr($line, 0, -3); // 空格[]
        } else {
            $pattern = '/\{(?:[^{}]*|(?R))*\}/';
            if (preg_match_all($pattern, $line, $m)) {
                $str = end($m[0]);
                $contexts = json_decode($str, true);
                $line = rtrim(substr($line, 0, strlen($str) * -1));
            }
        }
        $pattern = '/\[(.*?)\] (\w+)\.(\w+):\s(.*)/';
        if (preg_match($pattern, $line, $m)) {
            // 创建 DateTime 对象，并指定原始时间字符串格式
            $dateTime = DateTime::createFromFormat('Y-m-d\TH:i:s.uO', (string)$m[1]);
            $formattedDateTime = $dateTime->format('Y-m-d H:i:s');
            $messages = explode('<br>', (string)$m[4]);
            $message = array_shift($messages);
            $message = '<h6>' . $message . '</h6><br>';
            $message .= implode('<br>', $messages);
            $data[] = [
                'datetime' => $formattedDateTime,
                'type' => $m[2],
                'level' => $m[3],
                'message' => $message,
                'contexts' => $contexts,
                'webProcessor' => $webProcessor
            ];
        }
    }
} else {
    MVC::warningExit('<h1>NOT FOUND ' . relDir($filename) . '</h1><p>日志文件不存在</p>');
}
$cssJs = MVC::getMvcCssJs();
?>
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charSet="utf-8" />
    <title>日志 <?= $file ?></title>
    <?= $cssJs ?>
    <style>
        body {
            padding: 10px;
        }

        div {
            padding: 0;
            margin: 0;
        }

        h6 {
            font-size: 14px;
            color: #600
        }

        .dd {
            width: 650px;
            height: 300px;
            overflow: auto;
            margin: 0;
            padding: 0;
        }

        table.mvc-blue-table {
            width: 100%;
            border: 1px solid #ddd;
            white-space: inherit;
            word-break: break-word;
        }

        .mvc-blue-table td {
            text-align: left;
            padding: 0 0 0 5px;
        }
    </style>
</head>

<body>
    <h1>日志</h1>
    <p>前 <?= $maxRecord ?> 条, 来自 <?= $file ?></p>
    <div>
        <table class="mvc-blue-table">
            <thead>
                <th>时间/级别</th>
                <th>内容</th>
                <th>上下文信息</th>
                <th>WEB请求</th>
            </thead>
            <tbody>
                <?php foreach ($data as $item) : ?>
                    <tr>
                        <td style="width: 135px;"><?= $item['datetime'] ?> <?= $item['level'] ?></td>
                        <td><?= $item['message'] ?></td>
                        <td style="width: 650px;">
                            <?php
                            if ($item['contexts']) {
                                echo str_replace('overflow:auto', '', Dump::dumpResult(false, $item['contexts']));
                            }
                            ?></td>
                        <td style="width: 250px;">
                            <div><b>Server:</b> <?= $item['webProcessor']['server'] ?></div>
                            <div><b>Client IP:</b> <?= $item['webProcessor']['ip'] ?></div>
                            <div><b>Referrer:</b> <?= $item['webProcessor']['referrer'] ?></div>
                            <div><b>URL:</b> <?= $item['webProcessor']['url'] ?></div>
                        </td>
                    </tr>
                <?php endforeach; ?>
            </tbody>
        </table>
    </div>
</body>

</html>