<?php

use xmvc\MVC;

$menus = [];
$contents = file_get_contents(realpath(dirname(__FILE__) . '/../') . '/Cmd.php');
preg_match_all('/\/\*\*(.*?)\*\/\s+public\s+function\s+([^a-zA-Z0-9_]*)([a-zA-Z0-9_]+)(?=\()/s', $contents, $m);
if ($m) {
    foreach ((array)$m[0] as $i => $v) {
        if (strpos($v, '@menu') !== false) {
            $pattern = '/\/\*\*\s*\*\s*(.*?)\s*@/s';
            if (preg_match($pattern, $v, $m2)) {
                $remark = trim($m2[1], '*');
            }
            $funcName = $m[3][$i];
            $reflector = new \ReflectionMethod($this, $funcName);
            $reflectionParameters = $reflector->getParameters();
            $params = [];
            if ($reflectionParameters) {
                foreach ($reflectionParameters as $k => $pv) {
                    preg_match('/@param[^\$]+\$' . $pv->name . '\s+([^\r|\n]+)/', $v, $m3);
                    $params[$k] = new \stdClass();
                    $params[$k]->name = $pv->name;
                    $params[$k]->remark = $m3 ? $m3[1] : $pv->name;
                }
            }
            $menus[] = [$funcName, $remark, $params];
        }
    }
}
$liArr = [];
foreach ($menus as $v) {
    list($funcName, $remark, $params) = $v;
    if ($params) {
        $inputs = [];
        foreach ($params as $k => $pv) {
            $inputs[] = '<span style="font-size:.8em">' . $pv->remark . ':</span> <input type="text" style="width:100%" name="' . $pv->name . '">';
        }

        $liArr[] = '<li style="padding-top:.5em;font-size:1.1em;" class="border hover">'
            . $remark . '<br />'
            . implode('<br />', $inputs)
            . ' <br />
                <a href="' . HOST . '/xmvc/core/cmd-' . $funcName . '" onclick="return bindLiInputParamValue(this)" target="_blank" style="font-size:1.1em">执行</a></li>';
    } else {
        $liArr[] = '<li style="padding-top:.5em" class="border hover"><a href="' . HOST . '/xmvc/core/cmd-' . $funcName . '" target="_blank" style="font-size:1.1em">' . $remark . '</a></li>';
    }
}
$liHtml = '';
$liHtml .= '<li><a href="' . HOST . '/xmvc/core/Cmd-logout" target="_blank" style="font-size:1.1em;color:#8066A0">安全退出</a></li>';
$liHtml .= '<li>
            帮助文档
            <ul>
                <li style="padding-left:2em"><a href="' . HOST . '/xmvc/doc/phpdoc/index-index~type-xmvc" target="_blank" style="font-size:1.1em">查看 xmvc 文档</a></li>
                <li style="padding-left:2em">-------- <a href="' . HOST . '/xmvc/doc/phpdoc/index-create~type-xmvc" target="_blank" style="font-size:1.1em">生成 xmvc 文档</a></li>
                <li style="padding-left:2em">---------------- <a href="' . HOST . '/xmvc/doc/phpdoc/index-clear~type-xmvc" target="_blank" style="font-size:1.1em">清空 xmvc 文档</a></li>
                <li style="padding-left:2em"><a href="' . HOST . '/xmvc/doc/phpdoc/index-index~type-project" target="_blank" style="font-size:1.1em">查看 ' . PROJECT . ' 文档</a></li>
                <li style="padding-left:2em">-------- <a href="' . HOST . '/xmvc/doc/phpdoc/index-create~type-project" target="_blank" style="font-size:1.1em">生成 ' . PROJECT . ' 文档</a></li>
                <li style="padding-left:2em">---------------- <a href="' . HOST . '/xmvc/doc/phpdoc/index-clear~type-project" target="_blank" style="font-size:1.1em">清空 ' . PROJECT . ' 文档</a></li>
            </ul>
        </li>';
$liHtml .= '<li><a href="' . URL_RUNTIME . '/runtime.html" target="_blank" style="font-size:1.1em;color:#8066A0">runtime 运行时状态</a></li>';
$liHtml .= '<li class="list0"><a href="' . HOST . '/xmvc/core/cmd-showErrorLogFile~date-' . date('Y-m-d') . '" target="_blank" style="font-size:1.1em">错误日志 ( 今天, 只取前 1024 条记录 )</a></li>';
$liHtml .= '<li class="list0"><a href="' . HOST . '/xmvc/core/cmd-clearErrorLogFile~date-' . date('Y-m-d') . '" target="_blank" style="font-size:1.1em;color:#C00" onclick="return confirm(\'确认要备份然后清空今天的日志?\')">备份今天的日志为 Y-m-d.log.backup 然后清空今天的日志文件</a></li>';
$liHtml .= '<li>
            控制台
            <ul>
                <li style="padding-left:2em"><a href="' . URL_RUNTIME . '/cli_dump.html" target="_blank" style="font-size:1.1em">dump(),dd() 函数输出 ( HTML 版 )</a></li>
                <li style="padding-left:2em"><a href="' . URL_RUNTIME . '/cli_dump.json" target="_blank" style="font-size:1.1em">dump(),dd() 函数输出 ( JSON 版 )</a></li>
                <li style="padding-left:2em"><a href="' . URL_RUNTIME . '/cli_error.html" target="_blank" style="font-size:1.1em">error 错误输出 ( HTML版 )</a></li>
            </ul>
        </li>';
$liHtml .= implode('', $liArr);
$msg = '<div style="padding:1em"><ul>{:1}</ul></div>';
$msg = qgprintf($msg, $liHtml);
MVC::echo($msg, true, '<title>CMD - CORE</title>');
